对这个javascript模式感到困惑

Confused about this javascript pattern

本文关键字:模式 javascript      更新时间:2023-09-26

遇到以下代码行,但无法理解。

这是什么(//)(this);javascript的目的?它有这个图案的名字吗?

代码如下:

//Move.js
(function(exports){
  exports.Move = function(){
  };
})(this);

此模式是"立即调用函数表达式"。简而言之,它只是一个立即执行的函数。端部的this是要发送到内部函数的参数,该函数将作为exports 访问

(function(exports){
    //that was "this" outside, is now "exports" in here
}(this));

在您的示例中,我们可以假设无论this是什么,它都是添加了Move方法的某个对象。

有些人还将这种模式称为"模块模式",因为它创建了一个"包含的环境",因此由于新的函数范围,它内部的东西对不可见。换句话说,任何内部的东西都能看到外部,但外部只能看到内部让它看到的

该模式只是在执行时将exports分配给this

假设全局作用域和浏览器,this将指向window对象。

考虑到这些假设,window.Move应该包含在IIFE(立即调用函数表达式)内部分配的函数。

如果在this而不是window的不同上下文中调用此函数,它将把该方法分配给外部环境中的任何this

此模式称为"模块模式"。有各种各样的子模式,其中一个使用了增强模块模式。

首先,我们导入模块,然后添加属性,然后导出这里有一个例子,从上面扩充我们的模块:

有关此模块模式的更多信息,请查看http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

有关一般Javascript模式的更多阅读,请查看http://addyosmani.com/resources/essentialjsdesignpatterns/book/