我试图返回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"
那么,任何人都可以解释
谢谢:)
- 编辑 -
你为什么要这样做? if(!(this instanceof test))返回new test();
这是一个难题。我必须返回 nth 最小汉明数。我并不擅长数学,所以我没有试图找到一些复杂的方程式,而是按顺序生成一个汉明数列表并将它们推送到原型数组。
该功能运行超过1k次,通常按顺序运行。我试图在这里得到的只是计算任何给定的汉明数一次。我的实际函数检查原型数组的长度,如果第n个数字已经存在,则返回该值而不是再次从0重新计算。
我可能会以不同的方式解决这个问题,但我很困惑为什么这不起作用。
答案 0 :(得分:0)
它正在返回一个新测试,就像你在函数的第一行中要求它做的那样。
自从第一次调用它以来,它不是test的实例(因为它是作为常规函数而不是构造函数调用的),它返回" new test()",它调用作为构造函数测试。在JavaScript中,您不能从构造函数返回任意值(当使用" new"调用时) - 它总是返回创建的对象。
示例:
function Foobar() { return 2 }
console.log(typeof Foobar()); // "number"
console.log(typeof new Foobar()); // "object"