使用原型继承为什么会改变子类的构造函数呢?
看代码:
var A = function (){
console.log('A');
};
var B = function (){
console.log('B');
};
var C = function (){
console.log('C');
};
B.prototype= new A();
var b = new B();
var c = new C();
console.log(b.constructor.toString()); //奇怪啊
console.log(c.constructor.toString());
第一个console输出结果竟然是:
function (){
console.log('A');
}
不是很理解为什么会是这个结果,求大神解答
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
B.prototype= new A();
是赋值操作,所以
A.prototype.contructor就赋值给了B.prototype在
new B();实例化的过程中其实是将B.prototype克隆出来 再让B构造函数处理后返回因此需要重新指定
另外,继承我个人建议用Object.create实现
你把原型链画出来就明白了,constructor属性是在原型里,又不是在b对象中
好想类似的问题刚有人问过了,js里,实例的constructor.ptototype一定指向实例的构造函数么?
因为你直接让
B.prototype= new A();这种方式覆盖了原先的
B.prototype.contructor属性。b.constructor实际上是去找b._proto_.constuctor,现在它的值是new A().constructor