面向对象

2017-05-09  本文已影响0人  daisx

一、面向对象的特性:

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

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、自定义构造函数创建对象

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

三、对象简单操作

1、读取对象属性

2、增加属性和方法

3、delete操作符

四、原 型链

1、原型链介绍

以上形成一种链式的访问结构,就称为原型链。
上一篇 下一篇

猜你喜欢

热点阅读