函数返回函数对象而不是原型值

时间:2014-08-31 01:39:20

标签: 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.prototype.arr = [0];

var t = test();
console.log(t); //Logs test function object
console.log(typeof t); //Logs "object"

那么,任何人都可以解释

  1. 为什么返回对象而不是数组值
  2. 如果有办法返回数组值
  3. 谢谢:)

    - 编辑 -

      

    你为什么要这样做? if(!(this instanceof test))返回new test();

    这是一个难题。我必须返回 nth 最小汉明数。我并不擅长数学,所以我没有试图找到一些复杂的方程式,而是按顺序生成一个汉明数列表并将它们推送到原型数组。

    该功能运行超过1k次,通常按顺序运行。我试图在这里得到的只是计算任何给定的汉明数一次。我的实际函数检查原型数组的长度,如果第n个数字已经存在,则返回该值而不是再次从0重新计算。

    我可能会以不同的方式解决这个问题,但我很困惑为什么这不起作用。

1 个答案:

答案 0 :(得分:0)

它正在返回一个新测试,就像你在函数的第一行中要求它做的那样。

自从第一次调用它以来,它不是test的实例(因为它是作为常规函数而不是构造函数调用的),它返回" new test()",它调用作为构造函数测试。在JavaScript中,您不能从构造函数返回任意值(当使用" new"调用时) - 它总是返回创建的对象。

示例:

function Foobar() { return 2 }

console.log(typeof Foobar()); // "number"
console.log(typeof new Foobar()); // "object"
相关问题