Как вызвать функцию-прототип из класса-прототипа? - PullRequest
1 голос
/ 02 мая 2010
function FakeClass(){};  
FakeClass.prototype.someMethod = function(){};
FakeClass.prototype.otherMethod = function(){
    //need to call someMethod() here.
}

Мне нужно вызвать метод SomeMode из другого метода, но, очевидно, он не работает. Если я создаю ее как одну функцию (не прототип), я могу вызвать ее, но вызов прототипа не работает. Как я могу сделать это, как если бы я относился к функции так же, как метод класса?

Обновление: Я вызываю метод после запуска события jQuery. Это влияет на то, как все это ведет себя?

function CicloviarioEngine(){};

CicloviarioEngine.prototype.test = function(){
    alert("Hey");
}
CicloviarioEngine.prototype.initialize = function(){
    $('#add-route').click(function(){
    this.test(); //doesn't work
    CicloviarioEngine.test(); //doesn't work
    externalTest(); //works 

    });
}

function externalTest(){
    alert("externalTest()");
}

Ответы [ 2 ]

4 голосов
/ 02 мая 2010

this внутри функции обработчика событий отличается от this во вмещающей функции initialize (фактически это будет ссылка на элемент, по которому был выполнен щелчок). Самый простой способ справиться с этим - сохранить значение this в переменной, к которой обработчик событий будет иметь доступ из входящей области:

CicloviarioEngine.prototype.initialize = function() {
    var that = this;
    $('#add-route').click(function(){
        that.test();
    });
};
2 голосов
/ 02 мая 2010

Члены прототипа будут доступны в экземпляре объекта, поэтому вы можете просто вызвать метод, используя ключевое слово this:

FakeClass.prototype.otherMethod = function(){
  this.someMethod();
};

Проверьте пример здесь .

...