【问题标题】:Best method for adding your script to the window object?将脚本添加到窗口对象的最佳方法?
【发布时间】:2013-08-12 11:06:26
【问题描述】:

我在 JavaScript/jQuery 插件开发中看到了一种熟悉的模式(Modernizr 使用了第一个示例),通过这种模式,函数很好地包装在 IIFE 中,并在 window 对象上全局定义.我要问的是,通过执行以下操作使您的插件/脚本在全球范围内可访问是否是个好主意:

window.myPluginName = (function (window, document, undefined) {
  // Plugin logic
})(window, document);

我问这个是因为一些脚本/插件需要在它们被调用的 DOM 中访问,或者在文档/文件中的其他地方访问。在插件中我有时也会看到:

(function (window, document, undefined) {
  window.myPluginName = function () {
    // Plugin logic
  }
})(window, document);

甚至这个:

(function (window, document, undefined) {
  var myPluginName = function () {
    // Plugin logic
  }
  window.myPluginName = myPluginName;
})(window, document);

我对设置背后的差异非常感兴趣,如果有人比我更有经验,我会很乐意提供一些建议,说明哪种设置最适合用于开发。谢谢!

【问题讨论】:

  • 这个问题是一个很好的、简洁的解决方案总结。

标签: javascript window


【解决方案1】:

简答:使用对您最有意义的一种。

更长的答案:唯一的区别是在哪里分配发生,但在功能方面它们都是等价的。它们中没有一个比另一个有任何优势或劣势。

注意: 就目前而言,最后两个不起作用,因为 window 在函数内部未定义。但我假设您实际上会将 window 对象作为参数传递给 IIFE。

【讨论】:

  • 谢谢菲利克斯,是的,我的错误我写错了关闭部分,我已经更新了问题。只是将其更改为传入正确的参数。
  • 当然,在第一个示例中,IIFE 还必须返回一个函数,然后将其分配给window.myPluginName
  • “返回一个函数”是指你可以通过 myPluginName(); 在 DOM 中初始化它吗?等等?
  • 好吧,在其他示例中,您将函数分配给 window.myPluginName,例如window.myPluginName = function () { // Plugin logic },所以为了让它们都等价,第一个函数会返回函数,因为赋值发生在 IIFE 外部,而不是内部。
  • 谢谢菲利克斯。那么,您究竟将如何“退回”它,您退回它的目的是什么?感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2021-11-24
  • 2020-09-03
相关资源
最近更新 更多