"this"在这个揭示的模块模式中意味着什么


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);

在该"根作用域"thiswindow

console.log(abc.self);

结果为我

Window {top: Window, window: Window, ...}

this引用当前对象。在你的条件下,this将是window的,当你试图得到值abc.self,你需要像这样使用:

this.self = this;

现在,只有您可以获取值:

var xyz = new abc();
xyz.self

但要注意的是,您不能像上面的代码那样使用 abc 作为构造函数,因为您使用的是闭包。

最新更新