我有一个命名空间MyNameSpace,它有一个公共变量名称和公共方法 SayName 和 ChangeName
var MyNameSpace = MyNameSpace|| function () {
var _name = "John";
function _SayMyName() {
return _name;
}
function _changeMyName(newName) {
_name = newName;
}
return {
SayName: _SayMyName,
ChangeName : _changeMyName,
Name:_name
}
}();
alert(MyNameSpace.SayName()) // John
MyNameSpace.ChangeName("Paul")
alert(MyNameSpace.SayName()) // Paul
alert(MyNameSpace.Name) // John
即使 _Name 已更改,MyNameSpace.Name 也将始终返回John。为什么? MyNameSpace.Name 不保留对 _Name 的引用?
该怎么做 MyNameSpace.Name 返回与 _Name 相同的值?
答案 0 :(得分:1)
您正在创建一个Name
属性包含_name
副本的对象。 _name
的值按值复制,而不是按引用复制,这就是它不会更改的原因。
你可以写这个,模仿你想要的行为:
return {
get Name () { return _name; },
//if you like to have a setter, than:
set Name (n) { _name = n; }
//the other properties go here...
}