为什么我得到了#undefined'当函数contructer用已经存在的对象调用时?

时间:2017-07-06 14:48:24

标签: javascript

这是我在代码段中的代码。

当我调用此代码

时,还要告诉我在javascript引擎的引擎下发生了什么



    function foo(a){
        
        this.a = a;
        
    }

    var obj0 ={
       
        foo:foo
    };

    var obj1 ={
        
        foo:foo
    };

    console.log( obj0.foo(5) );  // undefined
    console.log( obj1.foo(10) ); // undefined




1 个答案:

答案 0 :(得分:1)

它返回undefined因为

中没有返回语句
function foo(a) {
  this.a = a;
}

当您使用console.log(obj.foo(5))作为构造函数调用foo时,您不能实例化新的foo对象,只需将foo称为常规函数(此处为方法) obj)。

但是,如果您已经实例化了一个您已经使用过的对象:console.log(new obj.foo(5))


使用foo作为参数调用obj0上的1,只需将obj0的属性a设置为1即可更多。但是,如果你想要归还某些东西,你已经写了:

function foo(a) {
  this.a=a;
  return /*something here*/;
} 

编辑
你说你在一个已经存在的对象上调用构造函数,这在技术上是正确的:你调用函数但不是作为构造函数。构造函数被称为带有new关键字的构造函数,然后,只有这样,才会返回一个新对象。

你实际做的只是在这些对象上使用foo作为a的setter(并且没有return语句,因此返回undefined)。