该文档明确表示您应该在本地别名长命名空间类型:
如果这样做可以提高可读性,请为完全限定类型使用本地别名。本地别名的名称应与类型的最后部分匹配。
但是,除了参考安全之外,我无法想象为什么你不应该给命名空间起别名
别名命名空间的问题是引用不再指向相同的实例。
my.long.namespaces.myFunc()
// this refers to the same function, but is a different reference
var myLocalNamespace = my.long.namespace;
namespace.myFunc();
// and you can easily introduce bugs which are hard to find
myLocalNamespace.myFunc = "foobar";
myLocalNamespace.myFunc() // throws a type error because myFunc is now a string
这个错误很难搜索。
不过,别名有很多好处。JavaScript 中的每个成员查找都需要时间。因此,拥有不断需要查找成员链的代码是在浪费速度。由于本地的成本var
可以忽略不计,因此强烈建议您在引用长名称空间、函数结果(如$("something")
)等时使用本地变量。此外,它使您的代码更具可读性。考虑以下:
var handleNamespace = function() {
my.really.long.namespace.foo = "bar";
my.really.long.namespace.doIt(my.really.long.namespace.foo);
my.really.long.namespace.member = my.really.long.namespace.somethingElse(my.really.long.namespace.addOne(2));
};
如您所见,这很快就会变得混乱。摆脱重复代码可以节省处理能力并使您的代码更具可读性。
var handleNamespace = function() {
var namespace = my.really.long.namespace,
three = namespace.addOne(2);
namespace.foo = "bar";
namespace.doIt(namespace.foo);
namespace.member = namespace.somethingElse(three);
};