继承:(主要依靠原型链进行实现)
1.原型链:
其基本思想是:利用原型让一个引用类型的示例继承另一个引用类型的属性和方法
实现的本质是重写原型对象,并代之以一个新类型的实例
1.1 有关构造函数、原型和实例的关系:
每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,每个实例都包含一个指向原型对象的内部指针
1.2 引出原型链:
我们让一个原型对象等于另一个类型的实例,这时原型对象将包含一个指向另一个类型的指针,而另一个原型中也包含着一个指向另一个构造函数的指针,层层递进,就形成了原型链
1.3 实现原型链的基本方式:
//创建一个名为SuperType的新类型
function SuperType() {
//添加属性
this.property = true;
}
//添加方法
SuperType.prototype.getSuperValue = function () {
return this.property;
};
//创建一个SubType的新类型
function SubType() {
this.subproperty = false;
}
//注意:创建一个SuperType的实例,并把它赋值给SubType的原型
SubType.prototype = new SuperType();
//在SubType的原型中添加方法
SubType.prototype.getSubValue=function () {
return this.subproperty;
};
//创建一个SubType的实例并赋值给instance
var instance = new SubType();
alert(instance.getSuperValue());//true
这段代码的最终结果就是:instance 指向 SubType的原型,SubType的原型又指向SuperType的原型。
2. 默认的原型:
做了一个粗略的图:
3. 确定原型和实例的关系:
alert(instance instanceof Object);//true
alert(instance instanceof SuperType);//true
alert(instance instanceof SubType);//true
或者:
alert(Object.prototype.isPrototypeOf(instance));//true
alert(SuperType.prototype.isPrototypeOf(instance));//true
alert(SubType.prototype.isPrototypeOf(instance));//true