我正在尝试掌握 javascript 构造函数,以及它们是否真的是只读的。这是一个简单的测试场景:
var A = function(){}
console.log( A.prototype.constructor == A ); //true
所以在这一点上,每个新函数都会收到一个包含构造函数的原型(prototype)对象作为引用。这一切都很好。现在考虑一下:
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?
我的问题是:公开构造函数引用的目的是什么?显然你可以设置/覆盖它,但它除了改变引用之外什么都不做。还是我遗漏了什么?
最佳答案
constructor
属性只是为了方便,它对程序的行为完全没有影响。默认情况下,当你定义一个函数时,func.prototype.constructor
被设置为 func
本身——你可以稍后将它设置为任何你想要的,这没有什么区别。构造的对象完全取决于您传递给new
的函数:如果您执行new A()
,它将始终调用函数A
。
关于JavaScript 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4239408/