从构造函数返回任何对象都将使用该对象,而不是返回由构造函数自动生成的实例。这有点抽象,所以这里有一个例子来说明我的观点:
function Foo() {}
function Bar() {
return new Foo();
}
f = new Foo();
console.log(f instanceof Foo); //true
b = new Bar();
console.log(b instanceof Bar); //false
console.log(b instanceof Foo); //true
JavaScript 中的一切都是对象,包括函数,因此foo.bar
函数返回函数的事实意味着,当您调用时,new foo.bar()
您将收到由返回的函数foo.bar
而不是新foo.bar
实例。
虽然我不能 100% 确定您正在尝试做什么,但您可以instanceof
通过在上下文中使用来检查一个函数是作为对象初始化程序调用还是作为函数调用。这种模式通常用于强制对象初始化:
function Foo(...arguments...) {
if (!(this instanceof Foo)) {
return new Foo(...arguments...);
}
//do stuff
}
这允许Foo
作为函数调用并仍然返回一个新Foo
实例:
a = new Foo(); //a instanceof Foo
b = Foo(); //b instanceof Foo