第一种方法
function A(){
}
A.prototype.c = 10;
function B(){
}
B.prototype = new A()
console.log(new B().c) //10
1.为啥是 B.prototype = new A(); 而不是 B.prototype = A 或者 B.prototype = A.prototype?
要实现继承,就必须保证B继承A以后,B所做的修改不能影响到A以及继承自A的其它对象。
如果B.prototype = A的话,那么着两个对象的引用是完全一致了,这样的话,如果赋值 B.prototype.name=45455;那么A.name就直接变成45455;
直接把A和继承自A的其它对象全部改了,这根本谈不上继承。
至于B.prototype = A.prototype也是同理,修改B的原型就会直接把A的原型给污染掉。
B.prototype = new A();
这个方法,是创建了一个新的对象{},并且继承了A的原型,这是一个新对象,不是和A同一引用,所以不会污染A。
第二种方法
function A(){
this.name = "admin"
}
function B(){
A.call(this)
}
console.log(new B().name)
A.call(this)
把A的指向改为this,在函数B中就是B,然后A的函数内this具有nane属性,此时的this已经是B,所以被name属性被B复制过来