对象文字与函数

时间:2018-11-27 22:30:25

标签: javascript module notation

我无法找到以下答案。

我最担心的是启动一个大多数环境(主要是浏览器)不支持的项目。我发现可以用两种不同的方式编写模块:函数或对象文字。

对象文字

var foo = {
    bar: function(){}
}

函数表达式

var foo = function(){
    var bar = function (){};
    return{
        method: bar
    }
}

第二个选项具有创建私有成员的能力,而根据我的发现,第一个选项没有能力。我发现的信息还声称第一个选项是一个对象,而第二个选项是一个函数表达式。

JS的新手,所以我可能会碰到一些电线。除了可以将内部成员设为私有之外,该表示法还有其他区别吗?根据我的阅读,两者都可以遵循模块,观察者和单例模式。我发现的唯一区别是原型设计模式。

1 个答案:

答案 0 :(得分:1)

有几个要知道的术语。首先,它与功能有关:

Function Declaration

function foo(){

}

匿名函数声明:

function(){

}

Function Expression(将函数分配给变量):

var foo = function(){

}

Immediately Invoked Function Expression(第一组括号将匿名函数声明转换为表达式):

(function(){

})();

现在,除了功能之外,您还在询问 Object Literal

var foo = {
    bar: function(){}
}

vs。函数表达式:

var foo = function(){
    var bar = function (){};
    return{
        method: bar
    }
}

甚至是函数声明:

function foo(){
    var bar = function (){};
    return{
        method: bar
    }
}

您对函数语法能够创建私有成员的说法是正确的,而对象文字不具有这种能力(这只是对键/值进行分组的一种方式)。但是,另一个重要的区别是,函数可以用作构造函数(var f = new foo()),并且可以具有Prototypes,而对象常量不能。因此,在设置继承模式时,功能通常更具通用性。