《JavaScript 高级程序设计》 继承有关的总结

来源:互联网 发布:php微信分享接口开发 编辑:程序博客网 时间:2024/06/05 07:00

1. 原型链方式实现继承。

sub.prototype = new superType();

重写原型对象,用一个新的实例来代替默认提供的原型。

不能使用字面量方式写原型对象,相当于重写了原型链。

方法:1) instanceof 测试原型链中出现过的构造函数;2).isPrototypeOf() 链中出现过的原型,都是派生实例的原型

2. 派生对象添加方法会屏蔽原型链中之前存在的方法。

3.原型链的问题:1)在构造函数中已经出现过的问题,原型中的属性会被所有实例共享。2)不能向派生类型中传递参数(会影响所有对象实例)

其他的方法:

- 借用构造函数

function Sub(){    SuperType.call(this,"nicholas");//借调了父类的构造函数    /*...其他属性、方法*/}function SuperType(name){    this.name = name;}
- 每一次创建Sub,都会创建Sub中方法的新实例,这是没必要的,考虑函数复用的话,采用组合继承。

在父类的原型对象中添加方法,实现函数复用。

SuperType.prototype.getMessage=function(){    alert("lyx");};function Sub(name,age){    SuperType.call(this,name);//继承属性    this.age=age;}Sub.prototype = new SuperType();//继承方法Sub.prototype.constructor = Sub;//手动设置新的prototype的构造器属性

第一次调用SuperType构造函数,Sub的原型会添加两个属性;

第二次调用SuperType构造函数时,是在调用Sub构造函数时,这时候实例添加了两个属性,覆盖了原型中的。

- 原型式继承

以另一个对象实例为基础

var super={    name:"chloe3",    age:"19"};function obect(super){    function F(){};    F.prototype = super;//以此方式创建的新对象都以super为原型,共享了它的引用类型值的属性(因为是引用的浅复制)    return new F();}
ES5的方法:Object.creat(srcobj,{字面量形式——属性集合对象})

- 寄生式继承

创建一个封装了继承过程的函数。先采取某种方法继承某个实例,再对它增加特有的属性和方法,最后返回。

 function createOBJ(name,age){    var tmp = object(person);    tmp.name = name;    tmp.age = age;    return tmp;}
特点:主要考虑对象,不考虑新建类型和构造函数。做不到函数复用。
- 寄生组合式继承

function inheritPrototype(subType,superType){    var prototype = object(superType);    prototype.constructor = subType;    subType.prototype = prototype; }



原创粉丝点击