var abc=(function(){
var self=this;
return {
self:self
}
})();
在做abc.self
时,我会undefined
在这种情况下this
碰巧是什么。
的目的,您可以简化您所拥有的内容
(function(){ console.log(this) })();
您的表达式(在第一组括号中(定义了一个函数。然后,在没有上下文的情况下调用此函数(this
(。此构造称为 IIFE。由于您不传递上下文,因此行为取决于是否在严格模式下调用它:
在非严格模式下,您将拥有全局对象(
window
在浏览器中,global
在节点中(。在严格模式下,函数调用的缺失上下文不会被替换,而是
undefined
。
当你得到undefined
,我猜你处于严格模式。您可能在文件开头或封闭函数中具有"use strict";
。
如果你想传递一个上下文,你可以这样做
(function(){ console.log(this) }).call(someobject);
在该"根作用域"this
中window
和
console.log(abc.self);
结果为我
Window {top: Window, window: Window, ...}
this
引用当前对象。在你的条件下,this
将是window
的,当你试图得到值abc.self
,你需要像这样使用:
this.self = this;
现在,只有您可以获取值:
var xyz = new abc();
xyz.self
但要注意的是,您不能像上面的代码那样使用 abc 作为构造函数,因为您使用的是闭包。