javascript对象继承

By William.D.King

类式继承

function SuperClass() {
	this.superName = 'Shuai B',
	this.houGong = ['Miku', 'Inory']
}

SuperClass.prototype.getSuperValue = () => {
	return this.superName;
}

function SubClass() {
	this.subName = 'william';
}

SubClass.prototype = new SuperClass();

SubClass.prototype.getSuperValue = () => {
	return this.subName;
}

类式继承:问题

1.prototype(父类实例)的引用属性被共用,修改会影响所有实例

2.无法向父类传递参数

a.houGong.push('Lisa');
console.log(b.houGong); // ['Miku', 'Inory', 'Lisa']

构造函数继承

解决了共用属性的问题

But: 没有原型继承

let a = SubClass(),
    b = SubClass();

a.houGong.push('Lisa');
console.log(b.houGong); // ['Miku', 'Inory']

组合继承

两种继承结合

But: 调用了两次父类的构造函数

function SubClass() {
	this.subName = 'william'
	SuperClass.call(this);
}

SubClass.prototype = new SuperClass();

终极继承:寄生组合式

function SubClass() {
	this.subName = 'william'
	SuperClass.call(this);
}

function inheritPrototype(subClass, superClass) {
    function F() {};
    F.prototype = superClass.prototype;
    var p = new F();
    subClass.prototype = p;
}

inheritPrototype(SubClass, SuperClass);
Made with Slides.com