我正在尝试在 JS 中模仿类似 OOP 的行为。我正在尝试拥有(私有)变量:id
并且name
在函数中Person
。我向这个函数传递了用于初始化(私有)变量的参数。然后我返回具有 getter 和 setter for 的对象,name
并且只有一个 getter for id
,从而有效地使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
变量:
这里有什么问题?