2010-05-01 2 views
1
function FakeClass(){}; 
FakeClass.prototype.someMethod = function(){}; 
FakeClass.prototype.otherMethod = function(){ 
    //need to call someMethod() here. 
} 

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

Обновление: Я вызываю метод после запуска события 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()"); 
} 

ответ

4

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

CicloviarioEngine.prototype.initialize = function() { 
    var that = this; 
    $('#add-route').click(function(){ 
     that.test(); 
    }); 
}; 
+1

Работает отлично. Спасибо! И спасибо @CMS тоже. –

2

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

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

Проверить пример here.

+0

Я обновил этот вопрос ... я забыл упомянуть о JQuery часть, извините. :) –

Смежные вопросы