Я использую SWFAddress для глубоких ссылок на мой сайт ( ссылка на SWFAddress ). Мне нравится разбивать код на классы, поэтому у меня есть основная структура, подобная этой:
function SomeClass() {
//this adds the this.handleChange() function to the
//SWFAddress event listener
this.initializeSWFA = function() {
//SWFAddress variable is instantiated in SWFAddress javascript file
//so I can use it here
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, this.handleChange);
}
//SWFAddress suppose to call this function
this.handleChange= function(evt) {
//some code here
}
}
//instantiate the SomeClass
var someVar = new SomeClass();
someVar.initializeSWFA();
Эта строка здесь не работает:
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, this.handleChange);
Я попытался изменить его на:
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, this.handleChange());
или
var self = this;
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, self.handleChange);
и они тоже не работают.
Так как же ссылаться на функцию javascript из класса в такой ситуации? Если бы функция handleChange
была бы вне класса, я мог бы написать имя функции.
Заранее спасибо
EDIT
Во-первых, спасибо за все ответы. Я все еще пытаюсь понять, как все это работает в Javascript. Я не привык к объектно-ориентированной модели, как здесь, в Javascript.
Это решение на данный момент. Я до сих пор не могу понять, как сделать это красиво в Javascript, но это решение работает. Я попытался реализовать решение, предложенное ehudokai (спасибо), однако не смог заставить его работать.
function SomeClass() {
//this adds the this.handleChange() function to the
//SWFAddress event listener
this.initializeSWFA = function() {
//SWFAddress variable is instantiated in SWFAddress javascript file
//so I can use it here
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, someFunc);
}
//SWFAddress suppose to call this function
this.handleChange= function(evt) {
//some code here
}
}
//instantiate the SomeClass
var someVar = new SomeClass();
function someFunc(evt) {
someVar.handleChange(evt);
}
someVar.initializeSWFA();
Мне не нравится это, потому что это включает определение одной дополнительной функции, поэтому занимает дополнительное место. Если кто-нибудь выяснит, как добавить метод в SWFAddress EventListener из объекта Javascript, пожалуйста, помогите мне.