以下javascript代码的输出是什么?为什么?

时间:2017-02-26 21:12:37

标签: javascript function

我是JavaScript的新手。您能否解释下面的JavaScript代码的输出应该是什么?请尽可能详细解释原因。非常感谢你。

{{1}}

2 个答案:

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

在你的Foo方法(bar,baz,biz)中访问它