JavaScript:这些方法之间的区别是什么

时间:2016-12-10 09:25:51

标签: javascript

如果我有以下变量声明:

var person = function () {
    // private properties
    var name, age, address;

    // Return a new object literal with methods
    return {
        // setters
        set_name: function (n) { name = n; },
        set_age: function (n) { age = n; },
        set_address: function (n) { address = n; },

        // we can similarly write getters, if we want to.

        get_details: function () { return name + ":" + age + ":" + address }
    };
}();

现在,以下两项任务之间的区别是什么:

  1. var rajat = person;
  2. var rajat = person();
  3. [编辑]

    我正在使用" JavaScript:The Good Parts"这个例子在第42页。我发现它是一个报告的勘误表,并且该示例不应该在()的定义中有person。查看勘误表here

1 个答案:

答案 0 :(得分:3)

这两个陈述不相同。事实上,第二个会抛出一个javascript错误,因为你将person视为一个不是的函数。 person变量是具有set_nameset_ageset_addressget_details方法的类的实例。

如果您已将person定义为类而非实例(请注意声明末尾缺少的()):

var person = function () {
    // private properties
    var name, age, address;

    // Return a new object literal with methods
    return {
        // setters
        set_name: function (n) { name = n; },
        set_age: function (n) { age = n; },
        set_address: function (n) { address = n; },

        // we can similarly write getters, if we want to.

        get_details: function () { return name + ":" + age + ":" + address }
    };
};

那么你可以像这样得到一个实例:

var rajat = person();