原型链继承
function SuperType() {}
SuperType.prototype = {a: 'va'}
function SubType() {}
SubType.prototype.__proto__ = SuperType.prototype
/**
* 由于 SubType.prototype.constructor = SubType
* 即 SubType.prototype = new SubType().__proto__
* 所以 new SubType().__proto__.__proto__ = SuperType.prototype
*/
var sub = new SubType()
console.log(sub)
寄生继承
function shell(args) {
console.log('shell的上下文____', this)
var core = function() {
console.log('core的上下文____', this)
}
core.prototype = args
return new core()
}
var shellReturn = shell({a: 'va', b: 'vb'})
console.log(shellReturn)
评价:适合拓展属性和方法
寄生组合继承
function SuperType(a) {
this.a = a
}
SuperType.prototype.sayA = function() {
console.log('super.a____', this.a)
}
function SubType(a, b) {
SuperType.call(this, a)
this.b = b
}
SubType.prototype.__proto__ = SuperType.prototype
SubType.prototype.sayB = function(){
console.log('sub.b____', this.b)
}
var sub = new SubType('va', 'vb')
console.log(sub)
评价:寄生组合式继承的高效率体现在它只调用了一次SuperType构造函数,并且因此避免了再SubType.prototype上面创建不必要的、多余的属性。与此同时,原型链还能保持不变。因此,还能够正常使用instanceof和isPrototypeOf()。开发人员普遍认为寄生组合式继承是引用类型最理想的继承方式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。