2010-11-21 155 views
4

我想抓住JavaScript的构造函数,如果他们真的只读。这里是一个简单的测试场景:所以在这一点上,每一个新的函数接收一个包含构造函数作为参考的原型对象。这很好。现在考虑这个:JavaScript的构造函数

var B = function() { 
    this.id = 0; 
} 

A.prototype.constructor = B; // what does this do with A? 

所以,现在,A的每个实例都应该得到B中的构造函数:

var C = new A(); 

console.log(C.constructor == B) // true 

所以最后,这是否会对每个实例任何真正的影响?它似乎并不如此:

console.log(C.id); // what will this yield? 

我的问题是:什么是公开构造函数引用的目的是什么?显然你可以设置/覆盖它,但除了改变引用外,它什么也不做。或者我错过了什么?

回答

5

constructor属性仅仅是为了方便,它对你的程序的行为没有任何影响。默认情况下,当你定义一个函数时,func.prototype.constructor被设置为func本身 - 你可以将它设置为任何你想要的东西,它没有什么区别。构造的对象完全取决于传递给new的功能:如果你做new A(),它将总是调用函数A

+1

嗨,关于javascript继承的每一篇文章,都告诉我们修复原型构造函数,在那个问题之后:A.prototype = Object.create(B.prototype);' 'A.prototype.constructor = B //在这里修复' 我不明白'Object.create'的作用,但是下一行似乎没用。我写了一些代码删除它,并没有任何效果。所以我的问题是,为什么每个人都说*修复构造函数? – 2015-11-12 20:30:23