结合阮一峰大神的文档做下个人总结,详细介绍可以看下原网址:# 构造函数的继承
比如,现在有一个"动物"对象的构造函数。
function Animal(){this.species = "动物";
} 还有一个"猫"对象的构造函数。
function Cat(name,color){this.name = name;
this.color = color;
} 要实现猫继承动物的属性。
利用一个空对象作为中介,继承Animal的prototype,F是一个空对象,所以几乎不占内存。
我们将上面的方法,封装成一个函数,便于使用。
function extend(Child, Parent) {
var F = function(){};F.prototype = Parent.prototype;
Child.prototype = new F();
//任何一个prototype对象都有一个constructor属性,指向它的构造函数。 //因此,在运行"Child.prototype = new F();"这一行之后,Child.constructor也指向Parent! //这显然会导致继承链的紊乱,因此我们必须手动纠正,将Child.prototype对象的constructor值改为Child。Child.prototype.constructor = Child;
Child.uber = Parent.prototype;
}
使用的时候,方法如下
extend(Cat,Animal);
var cat1 = new Cat("大毛","黄色");
alert(cat1.species); // 动物 这个extend函数,就是YUI库如何实现继承的方法。
另外,说明一点,函数体最后一行
Child.uber = Parent.prototype;
意思是为子对象设一个uber属性,这个属性直接指向父对象的prototype属性。(uber是一个德语词,意思是"向上"、"上一层"。)这等于在子对象上打开一条通道,可以直接调用父对象的方法。这一行放在这里,只是为了实现继承的完备性,纯属备用性质。