Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 外部设置对象中应可访问的变量_Javascript_Oop_Closures - Fatal编程技术网

Javascript 外部设置对象中应可访问的变量

Javascript 外部设置对象中应可访问的变量,javascript,oop,closures,Javascript,Oop,Closures,好的,我知道通过闭包我可以做这样的事情: var x, obj = { init: function() { x = 123; }, func: function() { return x; } }; obj.init(); obj.func(); ==> 123 但是,我希望能够在外部应用x的值(在对象外部,以及以后)。。。我想也许我

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

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
但是,它不起作用。。这有可能吗


谢谢。

您可以使用
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

不确定我是否完全理解你想做什么。。。x应该是全球性的吗?或者它应该是obj中的一个变量,或者您希望它是一个私有变量。。。我不清楚你想在这里做什么。x应该是obj中的一个变量。。最终,我试图解决一个问题,即当嵌套在多个函数中时,不能使用“this”来引用对象本身。我总是必须在我的对象的init方法中定义“self=this”,我一直在寻找一种方法使其自动化,因此默认情况下,我的所有对象都有一个引用对象本身的自变量。以下是我真正正在做的一个例子: