Объект 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, время: 02:03. |