这是我在代码段中的代码。
当我调用此代码
时,还要告诉我在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

答案 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)。