为什么实用模块&构造函数模式将其作为全局接受

Why does the Practical Module & Constructor patterns accept this as a global?

本文关键字:全局 模式 构造函数 模块 amp 为什么      更新时间:2023-09-26

实用模块模式接受this作为全局:

(function( global )
  var Module = ...
  ...
  ...
  global.Module = Module;
})( this );

这个决定背后的理性是什么?

实用构造函数也是如此。

您引用的代码在技术上等效于:

(function()
  var Module = ...
  ...
  ...
  this.Module = Module;
})();

如果在构造函数或方法之外按预期使用,则this将引用全局对象(如window)。通过使用名称global而不是this来引用它,代码可以更明确地表明这就是正在发生的事情。(您必须承认,"global"比"this"更清楚地表示全局对象!)

不知怎么的,我没有理解你的意思。这是指当前作用域/当前对象。如果你把它放在你的"全局"范围这个将是窗口元素(或任何全局对象)。

<script type="text/javascript">
var tmp = {
    someVar: null,
    init: function( someVar ){
        this.someVar = someVar;
    }
};
tmp.init( this );
window.console.log( tmp.someVar === window ); // true
</script>

现在tmp.someVar窗口是同一对象