外部设置应在对象内可访问的变量

时间:2011-03-03 02:48:27

标签: javascript oop closures

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

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

然而,它不起作用..这可能以某种方式吗?

感谢。

1 个答案:

答案 0 :(得分: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