面向对象

一、面向对象的特性:

 【封装--继承--多态】

1、封装

使用对象来封装函数和变量。主要是用来阐述对象中包含的内容。包括属性和方法。

2、继承

一个类获得另一个类的方法和属性。实现代码的重用,(只发生在对象之间)。
继承

js中有三种继承方式

3.1、js原型(prototype)实现继承
prototype 属性使您有能力向对象添加属性和方法。
3.2、构造函数实现继承
3.3、call , apply实现继承

4、多态

相同操作,不同对象表现不同行为。


二、对象创建

1、字面量方式创建对象

    var o={
        pro_One: '对象',
        pro_Two:'123',
        Meth: function () {
            console.log(this.pro_One);
        }
    }
  o.Meth();
存在的问题: 代码冗余, 当创建多个同类型对象时,有大量重复性代码, 结构性不清晰

2、内置构造函数创建对象

var obj=new Object()
    obj.pro_one='对象';
    obj.pro_two='123';
    obj.mathod= function () {
        console.log(this.pro_one);
        console.log(this.pro_two); }
 obj.mathod()
 console.log(obj.mathod);
存在的问题:代码冗余, 创建多个对象,大量重复代码, 复用性不好

3、工厂函数封装创建对象

function createObject_cat(){
    var obj=new Object();
    obj.pro_one='对象';
    obj.pro_two='123';
    obj.mathod= function () {
        console.log('工厂方式创建一个对象');
       };
return obj;
}
var cat_one=createObject_cat();
cat_one.mathod();

4、自定义构造函数创建对象

  • 4.1、提供一个构造函数
    ----4.1.1、在构造函数中:函数可以作为值来传递
 function createObject(pro_one,pro_two,demo){
        this.pro_one=pro_one;
        this.pro_two=pro_two;
        this.mathod= demo;
    }
    var obj1=new createObject('pro1','pro2',function(){console.log('函数作为值传递')});
    console.log(obj1.pro_one);
    console.log(obj1.pro_two);
    obj1.mathod();
    console.log(obj1);
  • 4.2、 使用“new” +“构造函数”创建对象
    ---- 4.2.1、使用了new关键字 构造函数的方式创建对象, 系统默认会创建一个新对象
    ---- 4.2.2、系统默认会将新创建的对象返回
  • 4.3、使用“this” 来设置对象的属性和方法
    ---- 4.3.1将这个新对象赋值给this
    function createObject(pro_one,pro_two){
        this.pro_one=pro_one;
        this.pro_two=pro_two;
        this.mathod= function () {
            console.log('自定义方式创建一个对象');
        };
    }
    var obj1=new createObject('pro1','pro2');
    console.log(obj1.pro_one);
    console.log(obj1.pro_two);
    obj1.mathod();
    console.log(obj1);

返回值的问题:

  1. 如果返回值是值类型的话,忽略,还是返回系统新创建的对象
  2. 如果返回值是null,忽略,还是返回系统新创建的对象
  3. 如果返回值是引用类型,会覆盖系统新创建的对象,返回指定的对象(引用类型);
    4.4、instanceof 和constructor属性
    ----4.4.1、instanceof 判断某个对象是否是指定构造函数创建
    console.log(obj1 instanceof createObject); 返回是一个布尔值
    ----4.4.1、构造器属性constructor 查找对象是由哪个构造函数创建
    console.log(obj1.constructor); 返回一个创建对象的构造函数
    4.5、返回值的问题:
    ----4.5.1. 如果返回值值类型,忽略,依旧返回系统对象
    ----4.5.2. 如果返回值是null,忽略,依旧返回系统对象
    ----4.5.3. 如果返回值是引用类型(return function{}),引用类型覆盖原对象(返回的匿名函数),
  • 4.6自定义构造函数和工厂函数的区别:
    ----4.6.1、 自定义构造函数的首字母大写;
    ----4.6.2、 自定义构造函数通过new 构造函数来创建对象
    ----4.6.3、 自定义构造函数内部会自动创建新对象,并且赋值给this
    ----4.6.4、 自动返回新创建对象

  • 4.7原型对象
    ----4.7.1、 构造函数实例化一个对象时,系统默认创建一个和该构造函数绑定对象,这个对象就称为构造函数的原型对象;该对象包含了所有实例共享的属性和·方法,
    ----4.7.2、原型对象可以存放一些属性和方法,创建出来的对象可以调用原型对象中这些属性和方法通过在构造函数原型对象中添加属性和方法来实现对象间数据的共享
    ----4.7.3、原型对象的访问(读取),1. 构造函数通过自有的prototype属性来访问原型对象,2. 实例化的对象是通过非标准的.proto属性来访问原型对象的。

----4.7.4、我们根据需要,可以通过(构造函数.prototype) 方法指定新的对象,来作为构造函数的原型对象。但是这个时候有个问题,新的对象的constructor属性则不再指向构造函数。需要手动添加(constructor.构造函数)指回构造函数本身。
----4.7.5、isPrototypeOf:检查某个对象是否是指定对象的原型对象(包含原型链上面的对象)
----4.7.6、约定:
(01). 该对象构造函数的原型对象
(02). 构造函数的原型对象
(03). 构造函数的原型
(04). 对象的原型对象
(05). 对象的原型
这些说法都是一个意思,即: 该对象构造函数的原型对象

三、对象简单操作

1、读取对象属性

  • 1.1、读取对象属性时,都会执行一次搜索。首先在该对象中查找该属性,若找到,返回该属性值;否则,到[[prototype]]指向的原型对象中继续查找。

2、增加属性和方法

  • 2.1、对象中存在这个属性的话,就是修改,不存在就是添加

3、delete操作符

  • 3.1、delete删除实例中的某一个属性,不会对构造函数中申明的属性进行删除,所以也不影响其他的对象属性。
  • 3.2、delete删除原型中的某一个属性,会影响到所有引用了原型该属性的对象,返回未定义。

四、原 型链

1、原型链介绍

  • 1.1、 所有的对象都是由构造函数创建出来的,即每个对象都有相对应的构造函数
  • 1.2、每个构造函数都有一个与之向关联的原型对象
  • 1.3、 构造函数的原型对象本身也是对象,因此构造函数的原型对象也有自己的构造函数
以上形成一种链式的访问结构,就称为原型链。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容