var x = 0;
function foo() {
x++;
this.x = x;
return foo;
}
var bar = new new foo;
console.log(bar.x);
控制台中记录了什么?
我正在准备javascript求职面试,并且遇到了一个问答here。
令人困惑......
你能帮我解释一下发生了什么吗?
答案 0 :(得分:1)
如果将其复制到控制台,则会将其复制到日志undefined
。这是为什么?
构造函数返回自身,构造函数
这意味着您可以根据需要在new
前面写foo
,并且永远不会返回foo
的实例。
构造函数迭代x
但是,每次调用构造函数时,即使没有new
,它也会迭代外部x
变量。因此,如果您在此函数之外访问x
,它将被迭代到foo
函数被调用的次数。
new
可以调用没有括号的构造函数
写new foo
会自动调用没有参数的foo
,就像代码是new foo()
构造函数没有x
属性
当console.log
语句查找x
的{{1}}属性时,它实际上是在bar
函数对象上查找一个。该属性在foo
上不存在,因此结果为foo
。
答案 1 :(得分:0)
返回foo应返回对象,而不是其中的值,也不是来自它的调用。
CareerCups应该有一些JavaScript。您还可以查看CodeWars来练习您学到的知识,并了解忍者如何使用他们的JavaScript代码。