函数(全局){...}(这个)如何工作?

时间:2015-06-22 20:31:19

标签: javascript module

AirBnb Javascript Style Guide为模块推荐以下代码模式:

// fancyInput/fancyInput.js

!function(global) {
    'use strict';

    var previousFancyInput = global.FancyInput;

    function FancyInput(options) {
        this.options = options || {};
    }

    FancyInput.noConflict = function noConflict() {
        global.FancyInput = previousFancyInput;
        return FancyInput;
    };

    global.FancyInput = FancyInput;
}(this);

但是一旦你跑了例如:

FancyInput({a: 1, b: 2});

控制台显示此错误"未捕获TypeError:无法设置属性'选项'未定义"。

我试图理解为什么FancyInput函数内部是Window。到目前为止,我已经可以扩展这个模块模式因为非常开始。我应该用另一种方式绑定它吗?

1 个答案:

答案 0 :(得分:2)

它的要点是全局范围内的this在浏览器中为window。在其他环境(主要是node.js)中,它不是window,而是一个不同的全局对象,但在很多方面我们关心它的行为是一样的。

您的代码无效,因为您需要使用new关键字来实例化结构:

new FancyInput({a: 1, b: 2});

创建一个新对象,以便this.在类方法&构造