Javascript从字符串访问嵌套的闭包公共函数而不使用'this'

时间:2012-01-16 16:35:54

标签: javascript

我有封闭树:'A'包含私人封闭'煎饼'和'B'。有一种情况,我需要从'B'公共功能内部打电话,私人关闭'A' - '煎饼'并检索其公共特性。我该怎么做?哦,这没用,因为这不是一个对象。

我的代码:

var A = (function() {
    var pancake = (function() {
        return {
            numeric: 142
        };
    })(A);

    var B = (function() {
        return {
            init: function(name) {                
                console.log(pancake.numeric);
                //How to access the same element using 'name' variable?
            }
        };
    })(A);
    return {
        init: function() {
            B.init('pancake');
        }
    };
})();
A.init();

JSFiddle可能会显示更多详细信息:http://jsfiddle.net/yALkY/3/

提前致谢

1 个答案:

答案 0 :(得分:1)

虽然我必须与jfriend00合作,但是给定的代码过于复杂,一个解决方案是引入一些 map 来存储引用,例如:

var A = (function() {
  var pancake = (function() {
      return {
          numeric: 142
      };
  })();

  var B = (function() {
      return {
          init: function(name) {                
              console.log(privateVars[name].numeric);
              //How to access the same element using 'name' variable?
          }
      };
  })();

  // added:
  var privateVars = {
    pancake: pancake 
  };

  return {
      init: function() {
          B.init('pancake');
      }
  };
})();
A.init();

当然,缺点是您必须手动维护该列表。