【问题标题】:JavaScript: Accessing 'closed' variables in an inherited sub-moduleJavaScript:访问继承的子模块中的“封闭”变量
【发布时间】:2012-08-17 18:45:27
【问题描述】:

我有一个模块对象,我想克隆它然后覆盖一个函数。

var Module1 = (function () {
 var hello = "hi there!";
  return {
   sayHello : function () {
     console.log(hello);
   }
  }
})();

 var Module2 = (function (old) {
  var my = {}, key;
   for (key in old) {
    if (old.hasOwnProperty(key)) {
      my[key] = old[key];
    }
  }

  my.sayHello = function () {
    console.log(old.hello + " again");
  }

  return my;
}(Module1));

有没有办法从子模块访问“私有”变量“hello”?调用Module2.sayHello()(在上面显示的代码上)打印undefined again!

【问题讨论】:

  • 正如su- 所说,您可以使用公共函数返回private 变量,如this。希望这会有所帮助。
  • 您可以从外部范围访问私有变量吗?不;这就是私有变量的意义:P

标签: javascript design-patterns inheritance module


【解决方案1】:

不,你不能。

你可以添加

getHello : function () {
    return hello;
}

进入 Module1 的返回块,在这种情况下,您公开一个公共函数,该函数返回 Module1 的私有变量 hello。

【讨论】:

  • +1,检查this,也许你可以举个例子。
  • 这就是我所怀疑的。变量需要保持私有,所以我改变了我的对象设计。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多