函数(全局){..}(this)的工作方式

how function(global){...}(this) works?

本文关键字:工作 方式 this 全局 函数      更新时间:2023-09-26

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

控制台显示此错误"Uncaught TypeError:无法设置未定义的属性'options'"。

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

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

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

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

其创建一个新的对象以使得CCD_ 5在类方法&构造函数。