【发布时间】:2025-12-03 14:25:01
【问题描述】:
首先,这个问题不是“构造函数属性是做什么的?” - 关于它到底是什么以及它是如何工作的,有很多很好的文档:它是对创建对象的函数的引用(可能从它的原型继承)。
我更感兴趣的是了解此属性的常见用例。理论上看起来一切都很好,但是您什么时候真正需要对构造对象的函数的引用?一些想法是:
- 也许我想克隆它。我可以再次调用构造函数并
获取我的对象的另一个实例。这当然不会很好用 因为您可能会创建对象的实例
原型,而不是对象本身;加上一个更受欢迎的方法 是创建一个新对象并设置该对象的原型。 - 也许你可以用它来判断对象的“类型”是什么
是。这似乎很奇怪,因为您可以使用
instanceof或Object.prototype.toString()代替。 - 能否更改或重新分配构造函数?是否有充分的理由 这样做?
希望有些人可以加入一些使用构造函数引用的优秀 Javascript 模式,或提供该属性为何存在的官方解释。
【问题讨论】:
-
Object.prototype.toString不会帮助您确定通过用户定义的构造函数创建的对象的类型。它仅有助于区分各种内置函数。 -
"这当然行不通,因为您可能会创建对象原型的实例,而不是对象本身" - 你是什么意思?它工作正常:jsfiddle.net/tjnuA
-
其实我什至不知道你是怎么做到的——像
var x = new myObj.constructor()之类的? -
@MikeChristensen 嗯,是的,你可以做到...这是一个合法的用例。
-
哦,抱歉,没有注意到您的 jsfiddle 链接 - 我的意思是,是的,它在理论上确实有效(我没有尝试过),但是您正在克隆原型,而不是目的。我已经更新了你的代码来演示:jsfiddle.net/tjnuA/1
标签: javascript prototype-programming