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。到目前为止,因为一开始我就可以扩展此模块模式。我应该以其他方式绑定它吗?
最佳答案
其要点是,在浏览器中,全局范围内的this
是window
。在其他环境(主要是node.js)中,它不是window
,而是一个不同的全局对象,但是在许多方面,我们关心它的行为是相同的。
您的代码无法正常工作,因为您需要使用new
关键字实例化结构:
new FancyInput({a: 1, b: 2});
这将创建一个新对象,以便
this.
在类方法和构造函数中起作用。