【问题标题】:Javascript Namespace: local variable has been updated but not the public oneJavascript 命名空间:局部变量已更新,但不是公共变量
【发布时间】:2016-01-29 18:01:26
【问题描述】:

我有一个命名空间 MyNameSpace,它有一个公共变量 Name 和公共方法 SayNameChangeName

 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

MyNameSpace.Name 将始终返回 John,即使 _Name 已更改。为什么? MyNameSpace.Name 不包含对 _Name 的引用?

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

【问题讨论】:

  • 您在对象中返回了_name 的副本,而不是对该属性的引用。
  • 正如您自己所说,它们是两个不同的变量(或者实际上,一个是属性而不是变量)。

标签: javascript oop namespaces


【解决方案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...
}

【讨论】:

  • 很好的答案!谢谢
  • 很高兴听到我能帮上忙!
猜你喜欢
  • 2012-12-28
  • 2017-01-04
  • 2014-07-05
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2015-04-22
  • 2011-03-25
  • 1970-01-01
相关资源
最近更新 更多