这是我的代码片段。
还告诉我当我调用此代码时,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
上调用foo
,1
作为其参数只是将obj0
的属性a
设置为1
,仅此而已。但是,如果您想退回某些东西,您会写:
function foo(a) {
this.a=a;
return /*something here*/;
}
编辑
你说你在已经存在的对象上调用构造函数,这在技术上是正确的:你调用了这个函数,但不是作为构造函数。构造函数作为带有new
关键字的构造函数调用,然后,只有这样,才会返回一个新对象。
您实际上所做的只是使用foo
作为对这些对象进行a
的 setter(并且没有 return 语句,因此它返回未定义(。