1.继承
- 接口继承 (java等)
- 实现继承
js由于没有函数签名无法实现接口继承,只支持实现继承,而且其实现继承主要依靠原型链实现。
2.原型链
回顾原型对象、构造函数、实例的关系: 每个实例都有一个原型(prototype)指向原型对象的指针,而原型对象的属性构造函数也是一个指针,此指针指向原型(prototype)所在的函数。// 被继承:SuperType
function SuperType () {
this.property = true
}
// SuperType的原型对象
SuperType.prototype.getSuperValue = function () {
return this.property
}
// 想继承:SubType
function SubType () {
this.subproperty = false
}
// 继承了SuperType
SubType.prototype = new SuperType ()
//验证
var instance = new SubType()
console.log(instance.getSuperValue()) //true
console.log(instance.toString()) //[object Object]
继承的实现思想:
一、让SubType的原型对象(SubType prototpye)指向SuperType的实例
二、而SuperType的实例有一个prototype属性指向其原型对象(SuperType prototype)
三、所以SubType prototype => SuperType prototype
图片是重点,从下往上看会收获良多
确定原型与实例关系
- instanceof 操作符
- isPrototypeOf()方法
console.log(instance instanceof Object) // true
console.log(instance instanceof SuperType) // true
console.log(instance instanceof SubType) // true
console.log(Object.prototype.isPrototypeOf(instance)) // true
console.log(SuperType.prototype.isPrototypeOf(instance)) // true
console.log(SubType.prototype.isPrototypeOf(instance)) // true