var abc=(function(){
var self=this;
return {
self:self
}
})();
在执行abc.self
时,我得到了undefined
this
恰好在此背景下的内容。
答案 0 :(得分:4)
为了解释
,您可以简化您所拥有的内容(function(){ console.log(this) })();
您的表达式(在第一组括号中)定义了一个函数。然后在没有上下文的情况下调用此函数(this
)。此构造称为IIFE。由于您没有传递上下文,因此行为取决于是否在strict mode中调用它:
在非严格模式下,您将拥有全局对象(window
在浏览器中,global
在节点中。
在严格模式下,函数调用的缺失上下文未被替换,它是undefined
。
当你得到undefined
时,我想你已经strict mode了。您可能在文件的开头或封闭的函数中有"use strict";
。
如果你想传递一个上下文,你可能已经完成了
(function(){ console.log(this) }).call(someobject);
答案 1 :(得分:1)
this
指的是当前对象。在您的情况下,this
将为window
,并且当您尝试获取值abc.self
时,您需要使用以下内容:
this.self = this;
现在,只有你可以获得价值:
var xyz = new abc();
xyz.self
但是要注意,你不能像上面的代码一样使用abc作为构造函数,因为你正在使用闭包。
答案 2 :(得分:1)
在那个"根范围" this
为window
和
console.log(abc.self);
的结果
Window {top: Window, window: Window, ...}