都2020了,你还不会js继承?
如何实现js继承,不难不难,看这里!
- 第一种,使用call
function Parent1(){
this.name = 'parent1';
}
Parent1.prototype.add=function(){
console.log('add');
}
function Child1(){
Parent1.call(this);
this.type = 'child1'
}
缺点:只能继承父类构造函数上的特性,原型对象上的继承不了!
- 第二种 借助原型链
function Parent2() {
this.name = 'parent2';
this.play = [1, 2, 3]
}
function Child2() {
this.type = 'child2';
}
Child2.prototype = new Parent2();
var s1 = new Child2();
var s2 = new Child2();
s1.play.push(4)
console.log(s1);
console.log(s2);
这种有一个问题,就是你单独改变了s1上的数组play,而去访问s2的时候,s2也同样改变了。
最好的实现,中间省略了其他的实现方法
function Parent5 () {
this.name = 'parent5';
this.play = [1, 2, 3];
}
function Child5() {
Parent5.call(this);
this.type = 'child5';
}
Child5.prototype = Object.create(Parent5.prototype);
Child5.prototype.constructor = Child5;