присвоение событию функции класса и обратный вызов[JS]
например:
window.onload = function1;
function1() будет выполнятся по завершению загруски страници
тоесть по наступлению события onload объекта window
если мы напишем так:
window.onload = function1();
то событию присвоится результат работы этой функции
можно определить функцию при присвоении событию
window.onload = function(){
...
};
это мы все знаем
с классами похожая тема
window.onload = this.function1;
присвоение событию функции текущего класса
пример:
var:'test message',
test:function(){
window.onload = this.function1;
},
function1:function(){
alert(this.var);
}
}
// по окончанию загруски возвращает - undefined
class.test();
при обращении к this мы получаем ссылку на элемент над которым было произведенно событие, а не на класс
и мне неочень понятно как из вызываемой функции(в нашем случае это function1()) получить доступ к элементам текущего класса
я решил проблему так:
var:'test message',
test:function(){
var obj = this;
window.onload = function(){ obj.function1() };
},
function1:function(){
alert(this.var);
}
}
// по окончанию загруски возвращает - test message
class.test();
вполне работает
в учебнике по ajax я нашел такой вариант:
var:'test message',
test:function(){
window.obj = this;
window.onload = this.function1;
},
function1:function(){
alert(this.obj.var);
}
}
// по окончанию загруски возвращает - test message
class.test();
последний вариант помойму наиболее подходящий для рещения этой проблемы
Во-вторых, сам вопрос лучше помещать в конце.
В-третьих, все решается намного проще.
if(typeof method != 'function')
method = obj[method];
return function () {
return method.apply(obj, this);
};
}
var obj = {
msg: 'Test',
test: function (el) {
alert(this.msg);
}
};
window.onload = bind(obj, obj.test); // Так
window.onload = bind(obj, 'test'); // Или так
я называл функции и переменные таким оброзом лиш для примера
в моем случае все савсем по другому
я не настолько туп чтобы называть функции function или переменные var
согласен, мой баг
хотя как таквого вопроса уже особо нет
такой вариант тоже интересен
но в моем случае это совершенно неподходит
создавать дополнительную функцию для присваивания событий
когда это можно и нужно сделать в теле класса, это както нетак
поясняю: я создаю класс для работы с ajax и выполнение события onreadystatechange в отдельной функйии ну совсем неудобно
ты со мной несогласен?
такой вариант тоже интересен
но в моем случае это совершенно неподходит
создавать дополнительную функцию для присваивания событий
когда это можно и нужно сделать в теле класса, это както нетак
поясняю: я создаю класс для работы с ajax и выполнение события onreadystatechange в отдельной функйии ну совсем неудобно
ты со мной несогласен?
В твоем случае этот код совершенно подходит. Если ты не в состоянии понять чтоже делает этот код и для чего нужна функция bind, то тебе нужно подучить JS, потому как программировать с такими знаниями ну совсем неудобно.
Ты со мной не согласен?
Ты со мной не согласен?
я с тобой согласен, отчасти
я согласен с тем, что мне стоит подучить JS, чем я собственно и занимаюсь.
работу и предназначение приведенной тобой функции bind я понял сразу.
после длительных размышлений я пришел к выводу, что использование функции bind все-таки имеет смысл и более выгодно, чем приведенные мною варианты.
единственное но
приведенной тобой функции фактически может, рассматривается как отдельная, совершенно независимая библиотечная функция и класс для ajax, который я написал, тоже мог бы рассматривается как отдельная библиотека.
я согласен, что связывание этих двух библиотек выгодно и удобно, но я при разработки библиотек как на JS, так и на PHP стремлюсь к реализации обособленности библиотек от других элементов программы, в том числе других библиотек и, исходя из этих целей использование функции bind не является наиболее верным решением
сразу баш вспоминается
у меня тоже была эта мысль
теперь старательно пытаюсь вспомнить, почему я от нее отказался
в opera все работает нормально
в ie неработает
в fox работает, но матерится
нашел в чем была проблема
ты забыл про то что второй аргумент функции apply() должен быть массив