我正在为我的项目中的几个脚本命名空间,在搜索了一段时间之后,我不确定我是否遵循命名空间属性的最佳实践。
以下是我的工作示例:
var myNamespace = myNamespace || {};
$.extend(true, myNamespace, {
subNamespace: {
}
});
$.extend(true, myNamespace.subNamespace, {
data: {}
});
$(document).ready(function () {
myNamespace.subNamespace.data = "Value as string";
alert(myNamespace.subNamespace.data);
});
如您所见,本案例中的属性名称为“数据”。
这是使用javascript,jquery实现命名空间属性的好方法吗?
谢谢
答案 0 :(得分:1)
使用jQuery.extend
添加深度是否有任何特定原因?乍一看,您也可以使用对象单例来定义命名空间:
var myNamespace = {
subNamespace: {
data: "Value as string"
}
};
答案 1 :(得分:1)
Addy Osmani是Javascript设计最佳实践的优秀作者,拥有多本免费电子书,并且有关于命名空间等主题的博客文章数不胜数。
他曾经是AOL的JS工程师,但最近宣布他将搬到谷歌。
这是他的一本书中专门针对Namespacing章节的链接,但我建议您查看他的主页。
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailnamespacing
答案 2 :(得分:0)
如果您必须使用extend()
,因为NameSpace
对象已存在,请使用深度扩展:
$.extend( true, NameSpace, {
subNameSpace : {
data : {}
}
});
不幸的是,您对正确命名对象的问题完全取决于项目。数据是其他开发人员不应该触及的吗?如果没有,那么一个约定是在名称的开头使用下划线。您将拥有多少subNameSpace
,data
将依赖于其中一个或全部。
如果要对jQuery
对象进行命名空间,则需要确定该方法是单独运行还是在一组选定对象上运行。如果前者只是扩展jQuery
,如果后者扩展jQuery.fn
。