Javascript 返回函数对象而不是原型值的函数
我试图返回Javascript 返回函数对象而不是原型值的函数,javascript,Javascript,我试图返回arr[0]的值,但当我试图返回值时,我最终接收到test函数对象。以下是一个例子: function test() { if (!(this instanceof test)) return new test(); console.log(this.arr[0]); //Logs "0" console.log(typeof this.arr[0]) //Logs "number" return this.arr[0]; } test.prototy
arr[0]
的值,但当我试图返回值时,我最终接收到test
函数对象。以下是一个例子:
function test() {
if (!(this instanceof test)) return new test();
console.log(this.arr[0]); //Logs "0"
console.log(typeof this.arr[0]) //Logs "number"
return this.arr[0];
}
test.prototype.arr = [0];
var t = test();
console.log(t); //Logs test function object
console.log(typeof t); //Logs "object"
那么,有人能解释一下吗
我可能会用另一种方式进行测试,但我不明白为什么这不起作用。它会返回一个新的测试,就像您在函数的第一行中要求它做的那样 由于您第一次调用它时,它不是test的实例(因为它是作为常规函数而不是构造函数调用的),因此它返回“new test()”,它将test作为构造函数调用。在JavaScript中,您不能从构造函数返回任意值(当使用“new”调用时)——它总是返回创建的对象 例如:
function Foobar() { return 2 }
console.log(typeof Foobar()); // "number"
console.log(typeof new Foobar()); // "object"
你为什么这么做<代码>如果(!(此测试实例))返回新测试()代码>啊,这是有道理的。我假设它将运行构造函数并返回构造函数所做的任何值,因为它是定义的。这是可以理解的。在这种情况下,您可以将其视为实际返回值的“new”运算符,而不是函数。@eclectist当作为构造函数调用时,函数必须返回对象。由于构造函数的最后一行返回this.arr[0],这是一个原语,因此将返回this对象(测试的新实例)(根据内部方法)。如果您初始化arr,比如说
test.prototype.arr=[{}]
则将返回该空对象。