JavaScript 构造函数

标签 javascript oop constructor

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

相关文章:

javascript - 过滤 AngularJS 模板中的嵌套列表并获取过滤数据的计数

javascript - 如何使用 jQuery 添加/附加到外部 JSON 文件

c++ - 在派生类中使用基类 Copy CTOR

php - 如何在 OOP PDO 中编写准备和执行语句?

java - 在java中你会把一个得分值作为游戏中的参数吗?

php - 为什么即使类和构造函数的大小写不同,我的构造函数仍然被调用?

c++ - 派生类(构造函数有参数)和基类(构造函数没有参数)之间没有可行的转换

javascript - 在 Flow Router 上使用 URL 查询参数进行搜索

javascript - 如何在单击时捕获 div 的 id 并将其传递给函数以使代码动态化?

javascript - javascript对象中的平等?