2013-03-20 3 views
0

У меня есть старый класс mootools, который я использую, который имеет много функций. Вместо расширения класса я пытаюсь просто вызвать один из методов класса вне класса. Так что, если класс выглядел примерно так:Вызов метода класса mootools из другой внешней функции

var myClass = new Class({ 
    search: function(){ 
     this.searchSpinner.show(); 
     this.request.send({data: this.data}); 
    }, 

    // many other functions 
}) 

Мне нужно вызвать search метод из другого сценария, загруженного на той же странице.

Сейчас я пытаюсь так:

window.myClass.search(); 

Но это приводит к большой волосатой ошибке, что я не могу понять, но который выглядит следующим образом:

Uncaught TypeError: Object function(){e(this);if(g.$prototyping){return this;}this.$caller=null;var i=(this.initialize)?this.initialize.apply(this,arguments):this;this.$caller=this.caller=null; 
return i;} has no method 'search' 

Есть «правильный» способ вызова этого метода?

ответ

3

Класс, определенный с помощью Mootool's Class, не ведет себя как статический класс на других языках. Для доступа к методам в этом классе, вам придется создать экземпляр этого класса первым:

var classObj = new myClass(/*any parameters if required, check the "initialize" method*/); 
classObj.search(); 
+0

Если я что-то пропустил, я уверен, что @ dimitar-christoff будет рано или поздно с дополнительной информацией :) –

+0

Привет, Джулиан, да, Димитар - человек с mootools! Итак, вы говорите внутри моего «вызывающего» сценария, мне нужно создать новый экземпляр класса myClass, а затем выполнить поиск против него? Я сделаю это. Спасибо – user101289

+1

+1 согласился. вы создаете прототип конструктора объекта - вам нужно создать экземпляр, чтобы использовать его. –

1

Вы пытаетесь применить «одиночки» схему: если вы будете использовать только одно вхождение этого класс, вы можете использовать:

var mySingleton = new new Class({ 

(обратите внимание на 2 х new ключевое слово), то

mySingleton.search() 

назвать ...

ой, и если вы пытаетесь добавить статические функции класса MooTools, просто объявить их так:

var myClass = new Class({ }); 
myClass.staticMethod = function() { 
    // ... 
}; 

надеюсь, что это помогает!

+0

@ Romain-- что означает синтаксис 'new new' на практике? Благодаря! – user101289

+0

хорошо, вы в основном создаете новый экземпляр класса сразу (и теряете способность создавать другие экземпляры) ... В итоге вы получаете своего рода одноэлементный шаблон mootools! это то же самое, что и делать: var myclass = new Class(); var myinstance = new myclass(); – Romain

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