【问题标题】:Javascript namespacing conventionJavascript 命名空间约定
【发布时间】:2013-07-18 23:12:23
【问题描述】:

我不确定使用哪种命名空间约定更好。

var App = {}; // global variable, the root of our namespace
(function() {

   App.something = function() {

   }

})();

(function() {

   window.App = {}; //global variable, the root of our namespace

   App.something = function() {

   }

})();

window.App 和 var App 都是全局变量,因此两种约定都可以达到相同的结果,但哪个更好?

【问题讨论】:

  • 没有更好,它们(几乎)是等价的。
  • 好吧,当使用var App = {}; 时,您不能稍后使用delete window.App 来删除该属性。但是当您将其声明为window.App = {}; 时,您可以。但这确实是使用一个而不是另一个的微不足道的原因
  • 这可能会被关闭,因为它是基于意见的。
  • 如果您不在浏览器中运行怎么办?
  • node.js 给我第二个块的错误。我们谈论javascript。但是 node.js 是 javascript :-)

标签: javascript namespaces


【解决方案1】:

唯一的区别是在第一个变体中,App 不能从 window 中删除,尽管它可以作为全局对象的属性访问。在第二种情况下,delete window.App 有效。另外请注意,您应该将命名空间附加到 window,而不是 Window,因为 JavaScript 区分大小写,而 Window 是构造函数。

除此之外,两者基本相同,没有“更好”。

【讨论】:

  • window 上的大写字母是一个错误,但还是感谢您让我知道。你会说一种约定在 js 社区中比另一种更常用吗?
  • 我不确定,但第二个对我来说看起来更干净。另一个常见的是var App = (function(){ /* return your object from here */ }())
猜你喜欢
  • 2011-10-03
  • 2023-03-03
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2016-03-25
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多