生成一个javascript函数,该函数返回自身的实例

生成一个javascript函数,该函数返回自身的实例,javascript,instanceof,single-instance,Javascript,Instanceof,Single Instance,在Javascript中,是否可以使函数Foo()既(Foo()==Foo),又(Foo()实例Foo) 这几乎奏效了: function Foo() { Object.setPrototypeOf(Foo,this); return Foo; } 因此,在本例中,Foo的new Foo()instanceof Foo,但如果我只调用Foo,而不调用new,它将不起作用。您需要这样做 function Foo() { return Foo; } // Foo() ===

在Javascript中,是否可以使函数
Foo()
(Foo()==Foo)
,又
(Foo()实例Foo)

这几乎奏效了:

function Foo() { Object.setPrototypeOf(Foo,this); return Foo; }
因此,在本例中,Foo的
new Foo()instanceof Foo
,但如果我只调用
Foo
,而不调用
new
,它将不起作用。

您需要这样做

function Foo() { return Foo; }             // Foo() === Foo
Object.setPrototypeOf(Foo, Foo.prototype); // Foo instanceof Foo

记住
a instanceof B
相当于
B.prototype.isPrototypeOf(a)

为什么要这样做?
Object.setPrototypeOf(Foo,this)
将Foo的原型设置为Foo的实例,该实例仍将原始Foo原型作为其
[[prototype]]]
(因为它是在交换原型之前构建的)。后续调用将继续在原型链上插入新对象。凌乱的如果没有新的东西,一切都会变得一团糟!当然,请不要在任何地方真正使用这个…@RobG也会搜索链接嗯,总有一天我会想出如何阅读规范,或者它会以一种合理理解的方式写出来…