“这个”在这个揭示模块模式中意味着什么

时间:2014-09-08 10:28:43

标签: javascript

var abc=(function(){

     var self=this;

     return {
        self:self
     }             


})();

在执行abc.self时,我得到了undefined this恰好在此背景下的内容。

3 个答案:

答案 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)

在那个"根范围" thiswindow

console.log(abc.self);

的结果

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