Объект JS не понятное поведение или как повесить обработчик внутри объекта
function floatBlock(el){
this.el=el;
var init=false;
this.run=function(){
alert(this.el+' | '+init);//!!!!!!!!!!!!!!!!!!!!!
if(init!=true){init=true; $(window).resize(this.run);}
}
this.run();
}
$().ready(function(){new floatBlock('QWERT')});
|
Arnowt,
$(function ()
{
function floatBlock(el) {
this.el = el;
var init = false;
this.run = (function (a)
{
return function() {
alert(a.el+' | '+init); //!!!!!!!!!!!!!!!!!!!!!
if(init!=true) {init = true; $(window).resize(a.run);}
}
}
)(this)
this.run();
}
new floatBlock('QWERT')
}
)
|
Египетская сила...
анонимная функция которая возвращает анонимную функцию... СПС конечно, но может есть варианты по проще? :) которые и через пол года можно быстро понять, учитывая что я больше на php специализируюсь. |
Arnowt,
http://learn.javascript.ru/bind |
Цитата:
Обычно чтобы сохранить this
$(function() {
function floatBlock(el) {
this.el = el;
var init = false;
var _self = this;
this.run = function() {
alert(this.el + ' | ' + init); //!!!!!!!!!!!!!!!!!!!!!
if (init != true) {
init = true;
$(window).resize(_self.run);
}
}
this.run();
}
new floatBlock('QWERT')
})
Можно ещё так: $(window).resize(this.run.bind(this));, но bind есть не во всех браузерах.(хотя полифил несложно пишется) |
Через «SELF» уже пробовал но как-то тоже не комильфо :D
упростил до максимума:
function floatBlock(el){
this.el=el;
this.move=function(){
alert(this.el);
//тут будет основной алгоритм
};
$(window).resize(this.move);
$(window).scroll(this.move);
this.move();
}
$(function(){new floatBlock('QWERT')});
может тогда проще всякий раз передавать параметр и вообще не хранить его в объекте ну типа: $(window).resize(function(){this.move(el)}); ? |
Хотя и через bind, думаю будет нормально... осел 6,0 не интересен, так можно и до калькулятора дойти. :)
На современных смартфонах, он же должен поддерживаться? |
Цитата:
Теперь можно ещё так: $(window).resize(()=>this.move(el));но это пока только в последних ff.:) Цитата:
|
| Часовой пояс GMT +3, время: 21:34. |