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"
那么,有人能解释一下吗

  • 它返回对象而不是数组值的原因
  • 如果有方法返回数组值
  • 谢谢:)

    --编辑--

    你为什么这么做?如果(!(此测试实例))返回新测试()

    这是个谜。我必须返回第n个最小的汉明数。我的数学不是很好,所以我没有试图找到一些复杂的方程来做这件事,而是按顺序生成一个汉明数列表,并将它们推到原型数组中

    该函数的运行次数超过1k次,并且通常按顺序运行。我想得到的是,只需要计算一次给定的哈明数。我的实际函数检查原型数组的长度,如果第n个数字已经存在,则返回该值,而不是再次从0重新计算


    我可能会用另一种方式进行测试,但我不明白为什么这不起作用。

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

    由于您第一次调用它时,它不是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=[{}]
    则将返回该空对象。