Прототип с проблемой обратного вызова - PullRequest
0 голосов
/ 21 декабря 2010
function Foo() {
 this.bar = false;
}

Foo.prototype={
 onLoad: function() {
          this.bar=true;
         },

 create: function(id) {
          SomeClass.someMethod({
           id: id,
           onWorkIsDone: this.onLoad
          });
         }
};

var temp=new Foo();
temp.create();

В этом образце есть логическая ошибка в строке 'onWorkIsDone: this.onLoad'. Что я должен поместить вместо this.onLoad, чтобы SomeClass вызывал именно метод temp.onLoad, когда он заканчивает свою работу?

Ответы [ 2 ]

0 голосов
/ 22 декабря 2010
    onWorkIsDone: (function() {
                        var self=this;
                        return function() {
                            self.onLoad()
                        }
                  }).call(this)

Простое закрытие сделало свое дело.

0 голосов
/ 21 декабря 2010

Я думаю, это то, что вам нужно ...

function Foo() {
 this.bar = false;
}

var SomeClass = { someMethod: function(vars) {
                        vars.onWorkIsDone();
                    }
                }

Foo.prototype={
 onLoad: function() {
          alert("hello!");
         },

 create: function(id) {
          SomeClass.someMethod({
           id: id,
           onWorkIsDone: this.onLoad
          });
         }
};

Вы правильно вызываете метод onWorkIsDone ()?

...