【问题标题】:externally setting variables that should be accessible within an object从外部设置对象内应该可以访问的变量
【发布时间】:2011-07-07 18:16:24
【问题描述】:

好的,所以我知道通过关闭我可以做这样的事情:

var x,
    obj = {
            init: function() {
            x = 123;
          },

          func: function() {
            return x;
          }

    };

obj.init();
obj.func();
==> 123

但是,我希望能够在外部应用 x 的值(在对象之外,以及稍后)...我想也许我可以这样做:

var obj = {
            init: function() {
              // do something nice here...
          },

            func: function() {
              return x;
          }
    };

var foo = {
            doIt: function() {

              var init = obj.init;
              var x;

              obj.init = function() {
                x = 456;
                init.apply(obj);
              }

              obj.init();
              obj.func();
          }
};

foo.doIt();
==> (error) x is not defined

但是,它不起作用..这有可能以某种方式做到吗?

谢谢。

【问题讨论】:

  • 不确定我是否完全理解你想要做什么...... x 应该是全球性的吗?或者它应该是obj中的一个变量,还是你希望它是一个私有变量......我不清楚你想在这里做什么。
  • x 应该是 obj 中的一个变量。最终我试图解决嵌套在多个函数中时无法使用“this”来引用对象本身的问题。我总是不得不在我的对象的 init 方法中定义'self = this',并且我一直在寻找一种自动化的方法,所以我的所有对象默认都有一个 self 变量,它将引用对象本身。这是我真正在做的一个例子:pastie.org/1627048

标签: javascript oop closures


【解决方案1】:

您可以使用new 运算符创建您的类型的对象,并设置该对象的属性。

function Foo() {
    this.init = function() {
        this.x = -1;
    };

    this.func = function() {
        return this.x;
    };
}

var o = new Foo;
o.x = 941;
o.func(); // 941
o.x = 22;
o.func(); // 22

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多