JavaScript使用prototype继承构造函数会改变的问题

查看:89
本文介绍了JavaScript使用prototype继承构造函数会改变的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

使用原型继承为什么会改变子类的构造函数呢?

看代码:

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');

}

不是很理解为什么会是这个结果,求大神解答

解决方案

B.prototype= new A();

是赋值操作,所以 A.prototype.contructor 就赋值给了B.prototype
new B();实例化的过程中其实是将B.prototype克隆出来 再让B构造函数处理后返回

因此需要重新指定

B.prototype= new A();
B.prototype.contructor = B;

另外,继承我个人建议用Object.create实现

B.prototype = Object.create(A.prototype);
B.prototype.contructor = B;

//这样继承就不用去实例化一次A

这篇关于JavaScript使用prototype继承构造函数会改变的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆