【问题标题】:javascript namespacing advicejavascript命名空间建议
【发布时间】:2011-08-27 16:24:02
【问题描述】:

我一直在编写一个相当密集的 Javascript 应用程序,并且遇到了命名空间问题。

我知道关于这个主题有很多,但我仍然对我应该如何去做有点困惑。

有没有办法将我所有的类和对象字面量包装到一个命名空间中,这是最好的方法吗?

我读了这篇文章 http://yuiblog.com/blog/2007/06/12/module-pattern/ 我想为我的项目命名,但不知道如何使用普通的 javascript 或 jQuery 来完成它。

编辑:我知道这不是一个直截了当的问题,因为它是个人喜好、风格和要求的问题。

谢谢,

提姆

【问题讨论】:

标签: javascript namespaces


【解决方案1】:

就个人而言,我讨厌人们将所有内容都包装在 function(){} 包装器中。它基本上将所有内容都设为私有,并且不允许您正确添加补丁。

您始终可以在全局命名空间中声明单个对象:

var base = {
  class0:function(){}
};
base.subspace1 = {
  myVar:'foo'
};
base.class1 = function(){};

此外,您可以通过辅助脚本文件动态附加到该对象:

base.subspace2 = {};

用法:

var foo = new base.class0();
var bar = base.subspace1.myVar;

【讨论】:

  • 谢谢约翰,这是一个不错的方法。我想我读了很多书,尝试了很多东西,以至于我认为我不能像这样附加到任何对象。
  • 没问题。关于 JavaScript 要了解的重要一点是,标准对象实际上只是一个大哈希表。一旦你明白了,剩下的就通过了。例如,您可以将访问栏设置为 window['base']['subspace1']['myVar']。这通常是类似的,虽然有点慢并且被认为是一种较差的编码风格。
【解决方案2】:

这篇文章几乎总结了“命名空间”对象的使用(也有很多关于该主题的其他文章)。请注意,使用全局变量和具有相同命名方案的下划线可以获得完全相同的效果,因此:

var myLib = {
  method1: function()...,
  method2: function()...
};

function myLib_metod1()...
function myLib_metod2()...

从“命名空间”冲突的角度来看是等价的。但是,我认为使用对象更整洁。

【讨论】:

  • 谢谢 Rob,我同意你的观点,我使用这种方法已经有一段时间了,但现在有一堆对象文字,在阅读了那篇文章后,我相信我需要开始包装它们起来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 2011-12-02
  • 2011-03-25
相关资源
最近更新 更多