有人能说出以下两个代码示例之间的区别吗?从结果方面来看,它们几乎相同,但这两个代码片段的用例是什么?引擎盖下的任何差异?在我们用JavaScript创建对象之前,我们需要避免或需要知道的任何陷阱?
var celebrity = {
celebrityID: 999,
getID: function () {
return this.celebrityID;
},
setID: function (theNewID) {
this.celebrityID = theNewID;
}
}
celebrity.getId(); // 999
celebrity.setId(123);
celebrity.getId(); // 123
Vs以上。
function celebrity () {
var celebrityID = 999;
return {
getID: function () {
return celebrityID;
},
setID: function (theNewID) {
celebrityID = theNewID;
}
}
}
var obj = celebrity();
obj.getID(); // 999
obj.setID(123);
obj.getID(); // 123
答案 0 :(得分:1)
从用例的角度来看,在第一种情况下celebrityID
是公开的,这有一个主要的区别,这意味着它有效:
celebrity.celebrityID = "foo"
celebrity.getID() // foo
这通常是不受欢迎的。在第二种情况下,celebrityID
是私有的。唯一的访问权限是通过getter / setter:
var obj = celebrity();
obj.celebrityID = "foo";
obj.getID(); // still 999
关于对象文字的函数的另一个好处是,如果要设置初始值,可以传入参数。例如:
function celebrity (val) {
var celebrityID = val || "Default";
return {
getID: function () {
return celebrityID;
},
setID: function (theNewID) {
celebrityID = theNewID;
}
}
}
var obj = celebrity("Foo");
obj.getID(); // 'Foo'
var obj2 = celebrity();
obj2.getID(); // 'Default'