引用this guy我们可以使用具有以下形式的幂构造函数
function constructor() {
var that = {};
that.data = true;
that.method = function () {};
return that;
}
创建在有或没有 new
关键字的情况下都能正确运行的对象。
我的问题是我们如何连接 instanceof 运算符以使用幂构造函数?我认为它与 object.prototype.constructor 属性有关,但我不确定如何在构造函数的范围内编辑它。
constructor() instanceof constructor // false but I want it to be true
new constructor() instanceof constructor // true
最佳答案
如果您试图接受 JS 中的思想流派,即您不应使用 new
,那么您将选择退出许多语言功能,包括 instanceof
.
instanceof
与 JavaScript 函数作为构造函数 + 原型(prototype)继承范式齐头并进。 x instanceof C
专门查看C.prototype
,并将其与 x 的原型(prototype)链进行比较(参见 OrdinaryHasInstance 算法)。 C.prototype
查找旨在与 new
运算符一起使用,当将其应用于任何函数 F
时,将创建一个新对象F.prototype
在其原型(prototype)链中,构造函数 F
将在其上运行(this
设置为新分配的对象)。
“强大的构造函数”只是返回对象的函数,不适用于普通语言机制(包括 ES2015 类)。尝试与它们一起使用 instanceof
是自相矛盾的:如果你想放弃 new
,你也应该放弃 instanceof
。
您为使 instanceof
工作而采取的任何技巧,如 Matt Browne 的回答中的技巧,最终都将实质上重新创建 new
已经提供的整个基础设施。 (参见 a similar conversation I've had previously。)
关于javascript - 没有 new 的 JS Power Constructor 和 instanceof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30688224/