JavaScript构造函数

时间:2010-11-21 18:12:37

标签: javascript oop constructor

我正试图抓住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?

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

1 个答案:

答案 0 :(得分:5)

constructor属性只是为了方便,它对程序的行为方式完全没有影响。默认情况下,当您定义一个函数时,func.prototype.constructor设置为func本身 - 您可以将其设置为您想要的任何内容,它没有任何区别。构造的对象完全取决于传递给new的函数:如果你new A(),它将始终调用函数A