внешние переменные, которые должны быть доступны внутри объекта - PullRequest
0 голосов
/ 03 марта 2011

Хорошо, так что я знаю, что через замыкание я могу сделать что-то вроде этого:

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 Ответ

1 голос
/ 03 марта 2011

Вы можете создавать объекты вашего типа с помощью оператора 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...