Javascript命名空间:局部变量已更新但不是公共变量

时间:2015-10-29 14:24:47

标签: javascript oop namespaces

我有一个命名空间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

jsfiddle

即使 _Name 已更改,

MyNameSpace.Name 也将始终返回John。为什么? MyNameSpace.Name 不保留对 _Name 的引用?

该怎么做 MyNameSpace.Name 返回与 _Name 相同的值?

1 个答案:

答案 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...
}