我正试图抓住javascript构造函数,如果它们真的是只读的。这是一个简单的测试场景:
var A = function(){}
console.log( A.prototype.constructor == A ); //true
所以此时,每个新函数都会收到一个原型对象,其中包含构造函数作为参考。这一切都很好。现在考虑一下:
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?
我的问题是:暴露构造函数引用的目的是什么?显然你可以设置/覆盖它,但除了更改引用之外它什么都不做。或者我错过了什么?
答案 0 :(得分:5)
constructor
属性只是为了方便,它对程序的行为方式完全没有影响。默认情况下,当您定义一个函数时,func.prototype.constructor
设置为func
本身 - 您可以将其设置为您想要的任何内容,它没有任何区别。构造的对象完全取决于你传递给new
的函数:如果你new A()
,它将始终调用函数A
。