例如,我有很多这样的函数:
function a() {
//do something
}
function b() {
//do something
}
// call function a
a();
// call function b
b();
如果我以这种方式初始化函数会有什么优点或缺点?
var jslib = {
a: {
init: function() {
//do something
}
},
b: {
init: function() {
//do something
}
}
}
// init function a
jslib.a.init();
// init function b
jslib.b.init();
答案 0 :(得分:5)
优点
a
将不会隐藏您的功能。缺点
尽管init
名称表明这些对象具有状态,因此它们不仅具有功能。在这种情况下,两个版本甚至不等同。
答案 1 :(得分:3)
定义对象文字的主要优点是不会污染全局命名空间和更清晰的代码组织。
Rebecca Murphey在这篇博文中解释了这些优势:
http://rmurphey.com/blog/2009/10/15/using-objects-to-organize-your-code/
我更喜欢在功能上而不是字面上创建对象,因为JS函数是第一类对象。因此,您可以定义可以在对象外部调用的公共方法和属性,但也可以使用隐藏在对象范围之外的私有变量和函数。
function Alphabet() {
// public property
this.letters = 'xyx';
// private variable
var letters = 'abc';
// public method
this.speak = function(){
say("Now I know my ABCs");
}
// private function
function say(message){
alert(message);
}
}
答案 2 :(得分:1)
唯一真正的优势是你没有用一堆额外的函数来污染全局命名空间。