为什么当函数构造器调用已经存在的对象时,我'undefined'?



这是我的代码片段。

还告诉我当我调用此代码时,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

好吧,它返回undefined因为 中没有返回语句

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

当你调用console.log(obj.foo(5))时,你不会使用foo作为构造函数实例化一个新的 foo 对象,你只需将foo作为常规函数调用(这里作为obj的方法(。

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


obj0上调用foo1作为其参数只是将obj0的属性a设置为1,仅此而已。但是,如果您想退回某些东西,您会写:

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

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

您实际上所做的只是使用foo作为对这些对象进行a的 setter(并且没有 return 语句,因此它返回未定义(。

最新更新