EDIT: 这不是关于箭头函数的问题。它也不是关于将 this 传递给IIFE 。这是一个与转译器相关的问题。
因此,我为我正在开发的应用程序创建了一个简单的发布-订阅模式。我使用ES6编写它,以使用spread/rest并避免一些麻烦。我使用npm和gulp进行转译,但它让我发疯了。
我将其设置为浏览器库,但意识到它可以在任何地方使用,因此我决定使其Commonjs和AMD兼容。
以下是我的代码缩减版本:
因此,我为我正在开发的应用程序创建了一个简单的发布-订阅模式。我使用ES6编写它,以使用spread/rest并避免一些麻烦。我使用npm和gulp进行转译,但它让我发疯了。
我将其设置为浏览器库,但意识到它可以在任何地方使用,因此我决定使其Commonjs和AMD兼容。
以下是我的代码缩减版本:
(function(root, factory) {
if(typeof define === 'function' && define.amd) {
define([], function() {
return (root.simplePubSub = factory())
});
} else if(typeof module === 'object' && module.exports) {
module.exports = (root.simplePubSub = factory())
} else {
root.simplePubSub = root.SPS = factory()
}
}(this, function() {
// return SimplePubSub
});
但无论我尝试什么(例如将 this 设置为变量并传递),它都将其设置为未定义。
}(undefined, function() {
可能与Babel不知道this将是什么有关,所以将其转译掉了,但我还能采取其他方法吗?
更新:传递}((window || module || {}), function() {
而不是this似乎可行。虽然我不确定这是最好的方法。
this
等于undefined
,这意味着两者是相同的。"不知道this
将会是什么" --- 它和每个人都知道它将是undefined
,根据标准。 - zerkmsthis === window
,而在 Node 中,在全局范围内使用时this === module
(好吧,就像一个 Node 模块可以是全局的一样)。 - Alexander O'Mara[object Window]
。它是IE 11.0.9600.18163在Windows 7 x64下。无论如何,让我们在SO上提出一个适当的问题,等一下... http://stackoverflow.com/q/34973752/251311 - zerkms