【发布时间】:2013-05-06 14:07:16
【问题描述】:
我正在尝试在 JS 中模仿类似 OOP 的行为。我试图在函数Person 中有(私有)变量:id 和name。对于这个函数,我传递了用于初始化(私有)变量的参数。然后我返回的对象具有 name 的 getter 和 setter,并且只有 id 的 getter,从而有效地将 id 设为只读。
所以 id 只能通过构造函数设置,而 name 可以随时设置和获取。
这是代码:
var Person = function (_id,_nm) {
var id, name;
this.id = _id;
this.name = _nm;
return {
setName: function (nm) {
name = nm;
},
getName: function () {
return name;
},
getId: function () {
return id;
},
print: function () {
document.writeln("Id: "+id+"<br />Name: "+name);
}
}
}
var person = new Person(123, "Mahesh");
person.print();
但是,当new Person(123,"Mahesh") 执行时,我不明白它实际上是否设置了id 和name,因为在调试时我可以看到将鼠标悬停在它们上时设置了适当的值,但本地面板没有显示它们已初始化:
或者在 print() 中没有引用所需的 id 和 name 变量:
这里有什么问题?
【问题讨论】:
-
你为什么使用 IE? O.o
-
嘿嘿好的菜鸟在这里:P 你用什么? IE有这么差吗?它只是舒服。看看它看起来很干净。
-
是的,它很糟糕(如果低于 IE10)..我不知道为什么它很糟糕,因为这里不是为了评论,但我建议你使用 Firefox 或 Chrome。
-
你应该看看Javascript: Do I need to put this.var for every variable in an object?,了解属性(“public”)和变量(“private”)之间的区别
标签: javascript oop closures