如果我有以下变量声明:
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;
var rajat = person();
[编辑]
我正在使用" JavaScript:The Good Parts"这个例子在第42页。我发现它是一个报告的勘误表,并且该示例不应该在()
的定义中有person
。查看勘误表here。
答案 0 :(得分:3)
这两个陈述不相同。事实上,第二个会抛出一个javascript错误,因为你将person
视为一个不是的函数。 person
变量是具有set_name
,set_age
,set_address
和get_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();