我是JavaScript的新手。您能否解释下面的JavaScript代码的输出应该是什么?请尽可能详细解释原因。非常感谢你。
{{1}}
答案 0 :(得分:5)
结果是错误。 f.bar不是一个功能。这是因为它是一个局部函数,其范围仅在Foo函数内。它实际上是一个私有函数,只能在它定义的函数中使用。
当你调用new Foo()时,你正在调用该函数作为构造函数。这将创建一个对象并将其返回。在该对象中可以引用的对象是'这个'。由于baz
作为属性添加到this
对象,因此它将包含在执行f = new Foo(7)
时创建的对象中。
baz是可用的,因为当你执行新的Foo()时它是构造对象的一部分。
f.biz()也可用,因为它被放置在Foo的原型中。添加原型意味着它由Foo的所有实例共享(f是其中之一)。
变量a仅在构造函数中定义,因此在biz()函数调用中将未定义。因此,f.biz()将返回undefined
。
答案 1 :(得分:1)
这不仅会引发错误,因为f.bar()只能在内部 Foo函数范围内访问(例如它基本上是“私有”方法),而且还有所有方法(bar) ,baz,biz)引用属性“a”,它实际上并未被定义为Foo实例的属性。
你应该使用this.a = a
在Foo中存储“a”,并使用return this.a