模块模式:通过点/括号表示法返回对象文字与返回对象构建?

时间:2014-02-12 15:23:11

标签: javascript

前言

在JavaScript中使用module pattern时,定义模块函数以返回对象文字是否有所不同:

var Person1 = (function(name) {

    return {
        talk: function(message) {
            console.log(name + ' said, "' + message + '".');
        }
    };

})('Steve');

VS。定义通过点表示法(或括号)构建对象的函数,然后返回对象:

var Person2 = (function(name) {

    var self = {};

    self.talk = function(message) {
        console.log(name + ' said, "' + message + '".');
    };

    return self;

})('Bob');

问题

  1. 这两个定义返回的对象之间有区别吗?或者仅仅是编码风格偏好的问题?

  2. 如果唯一的区别是风格,为什么你会提倡一种风格而不是另一种?

  3. 虽然Person1风格似乎更受欢迎,但我更喜欢Person2风格:

    • 在Person1中,样式很麻烦,因为错过的逗号可以破坏对象字面值,而JavaScript则更容易忽略分号。
    • Person1风格具有额外的缩进程度(无可否认,这是一个非常简单的问题)

    有什么我不考虑的吗?

1 个答案:

答案 0 :(得分:0)

不,它完全相同,都创建一个对象,然后返回它。

根据我的口味,如果要返回的对象很简单,我更喜欢第一种符号,主要是因为可读性原因。