首页 > 代码库 > JavaScript之面向对象学九(原型式继承和寄生式继承)

JavaScript之面向对象学九(原型式继承和寄生式继承)

一、原型式继承

该继承模式是由道格拉斯*克罗克福德在2006年提出的实现继承的方法.

模式的基本思路:借助原型可以基于已有的对象创建新的对象,同时还不必因此创建自定义类型。

代码如下:

function object(o) {    function F() { //定义一个F类型的对象        this.name="111";    }    F.prototype=o;//使F的原型对象指向传入对象,也就是说F继承了传入的对象,也相当于用传入的对象重写了F的原型对象 相当于如下代码/*    F.prototype={        name:"张三",    friends:["李四","王五"]    };*/    return new F();//返回F对象  注意:此时的原型对象里有一个指向F构造函数的constructor所以这个对象既包括F原型对象也包括F构造函数里面的属性}var person={    name:"张三",    friends:["李四","王五"]};var person1=object(person);    person1.name="Plugin";    person1.friends.push("赵六");var person2=object(person);    person2.name="Kobe";    person2.friends.push("Durrant");    alert(person1.friends); //输出:李四,王五,赵六,Durrant


这种继承模式和原型构造函数模式类似,只不过在这里F构造函数作为一个基础对象,他的原型对象是根据传入的对象,动态变化的!所以根据这个特点,通过更改传入对象的属性值,而省去了创建构造函数的步骤,所以当我们没有必要兴师动众的创建构造函数,只想让一个对象与另一个对象保持类似的情况下,原型继承是完全可以胜任的!

JavaScript之面向对象学九(原型式继承和寄生式继承)