对象字面量与函数
Object Literals vs. Functions
我找不到以下问题的答案。
我最担心的是启动一个在大多数环境(主要是浏览器)上不受支持的项目。我发现您可以用两种不同的方式编写模块:函数或对象文字。
对象文字
var foo = {
bar: function(){}
}
函数表达式
var foo = function(){
var bar = function (){};
return{
method: bar
}
}
第二个选项具有创建私有成员的能力,据我所知,第一个选项没有。我查到的资料也说第一个选项是一个对象,而第二个选项是一个函数表达式。
对 JS 半陌生,所以我可能会遇到一些问题。除了能够使内部成员私有之外,在表示法上还有其他区别吗?据我所知,两者都能够遵循模块、观察者、单例模式。我发现的唯一区别是原型设计模式。
有几个术语需要知道。首先因为它涉及到功能:
function foo(){
}
匿名函数声明:
function(){
}
Function Expression(函数赋值给一个变量):
var foo = function(){
}
Immediately Invoked Function Expression(第一组括号把匿名函数声明变成表达式):
(function(){
})();
现在,除了功能之外,您还询问 Object Literal:
var foo = {
bar: function(){}
}
对比函数表达式:
var foo = function(){
var bar = function (){};
return{
method: bar
}
}
甚至函数声明:
function foo(){
var bar = function (){};
return{
method: bar
}
}
关于函数语法能够创建私有成员的说法是正确的,而对象文字没有这种能力(它只是分组 keys/values 的一种方式)。但是,另一个重要的区别是函数可以用作构造函数 (var f = new foo()
) 并且可以有 Prototypes,而对象文字不能。因此,在设置继承模式时,函数通常更加通用。
我找不到以下问题的答案。
我最担心的是启动一个在大多数环境(主要是浏览器)上不受支持的项目。我发现您可以用两种不同的方式编写模块:函数或对象文字。
对象文字
var foo = {
bar: function(){}
}
函数表达式
var foo = function(){
var bar = function (){};
return{
method: bar
}
}
第二个选项具有创建私有成员的能力,据我所知,第一个选项没有。我查到的资料也说第一个选项是一个对象,而第二个选项是一个函数表达式。
对 JS 半陌生,所以我可能会遇到一些问题。除了能够使内部成员私有之外,在表示法上还有其他区别吗?据我所知,两者都能够遵循模块、观察者、单例模式。我发现的唯一区别是原型设计模式。
有几个术语需要知道。首先因为它涉及到功能:
function foo(){
}
匿名函数声明:
function(){
}
Function Expression(函数赋值给一个变量):
var foo = function(){
}
Immediately Invoked Function Expression(第一组括号把匿名函数声明变成表达式):
(function(){
})();
现在,除了功能之外,您还询问 Object Literal:
var foo = {
bar: function(){}
}
对比函数表达式:
var foo = function(){
var bar = function (){};
return{
method: bar
}
}
甚至函数声明:
function foo(){
var bar = function (){};
return{
method: bar
}
}
关于函数语法能够创建私有成员的说法是正确的,而对象文字没有这种能力(它只是分组 keys/values 的一种方式)。但是,另一个重要的区别是函数可以用作构造函数 (var f = new foo()
) 并且可以有 Prototypes,而对象文字不能。因此,在设置继承模式时,函数通常更加通用。