我只是在玩 JavaScript 并创建构造函数,我遇到了这段令人困惑的代码。
var foo = function(){
this.x = 1;
return function(){
return this.x;
}
}
var x = new foo();
console.log(x);
我为此执行了以下操作:
console.log(x); // The given output is expected for this line of code
console.log(x());
console.log(x()());
console.log(x()()());
以上所有内容都给了我与以下相同的输出:
function (){
return this.x;
}
有人可以解释一下上面的代码中发生了什么吗? 我无法为这个问题给出一个合适的标题。对此感到抱歉。
注意:我知道 JS 中的构造函数。上面的代码只是出于好奇。
最佳答案
长话短说 - 它没有做任何有用的事情。
如果构造函数返回一个对象,则 new 表达式生成的值就是该值而不是构造的对象。因此,您获得的不是一个 foo
实例,而是一个返回 this.x
的函数。
看起来这段代码正在尝试生成一个函数,该函数返回所创建对象的 this.x
值,但这不是它正在做的事情。由于您自己调用 x()
,因此 this.x
实际上引用了 global x
变量,因此,无论您调用 x()()() 多少次,它都只会返回自身。
如果您使用了 x
以外的任何变量名称,并且没有创建 x
变量(例如 y
),则 y ()
只会返回 undefined
,而 y()()
会产生 ReferenceError。
在严格模式下,这也会更快失败,因为当您尝试调用函数时,函数内的 this
将引用 undefined
。
关于javascript - 返回函数的类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29345691/