【问题标题】:JavaScript constructorsJavaScript 构造函数
【发布时间】:2011-05-13 11:16:29
【问题描述】:

我正在尝试掌握 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?

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

【问题讨论】:

    标签: javascript oop constructor


    【解决方案1】:

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

    【讨论】:

    • 嗨,每一篇关于 javascript 继承的文章、书都告诉我们修复原型构造函数,在那之后:A.prototype = Object.create(B.prototype);A.prototype.constructor = B //fixing here 我不明白Object.create 做了什么,但是下一行似乎没用。我写了一些代码删除它,但没有效果。所以我的问题是,为什么每个人都说要 fix 构造函数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2016-08-06
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多