Comments 20
Извините, но я ничерта не понял.
Объяснение никакое
Объяснение никакое
+11
совсем ничерта?
допустим, у нас очень полезная фукнция f1, которую надо вызвать с некоторыми аргументами, например, при onclick'е на какую-нибудь кнопку. так и пишем:
далее надо будет заменить
можно же просто записать
и чем больше в скрипте колбеков, тем больше толку от использования.
допустим, у нас очень полезная фукнция f1, которую надо вызвать с некоторыми аргументами, например, при onclick'е на какую-нибудь кнопку. так и пишем:
node.onclick = function() { f1(1,2,3); }
— через какое-то время эту же функцию с такими же аргументами надо запускать, например, при инициализации страницы. у нас будет дважды повторяться f1(1,2,3);
. далее надо будет заменить
1,2,3
на 1,2,3,4
: меняем аргументы в двух местах, что не приятно. можно же просто записать
myCallback = _clb(f1, [1,2,3]);
, прописать и на onclick, и на инициализацию myCallback.fire
— когда потребуется изменить список аргументов, сделать это можно будет в одном месте.и чем больше в скрипте колбеков, тем больше толку от использования.
0
Приучите себя пихать в функцию не кучу параметров, а объект параметров, это решит большинство проблем с совместимостью/расширяемостью.
0
Вы о замыканиях когданибудь слышали?
+2
оно и создается, только в одном месте (при создании объекта) независимо от кол-ва мест передачи колбека. плюс синтаксис много легче и читаемей.
0
Можно передавать необходимые вещи аргументами. Но всё равно странная штука.
0
Почему изобретатели всевозможных мертворожденных комбайнов избирают своей целью именно JavaSсript?
+2
Пардон, я тоже ничего не понял.
Вы изнасиловали функцию bind?
Function.prototype.bind = function(scope) {
var f = this;
return function() {
return f.apply(scope, arguments);
}
}
для варианта с аргументами
Function.prototype.bind = function(scope)
{
var f=this;
if(arguments.length==1) return function(){return f.apply(scope,arguments)};
var fnSlice=Array.prototype.slice,a=fnSlice.call(arguments,1);
return function(){return f.apply(scope,a.concat(fnSlice.call(arguments)))}
};
Вы изнасиловали функцию bind?
Function.prototype.bind = function(scope) {
var f = this;
return function() {
return f.apply(scope, arguments);
}
}
для варианта с аргументами
Function.prototype.bind = function(scope)
{
var f=this;
if(arguments.length==1) return function(){return f.apply(scope,arguments)};
var fnSlice=Array.prototype.slice,a=fnSlice.call(arguments,1);
return function(){return f.apply(scope,a.concat(fnSlice.call(arguments)))}
};
+4
Демо бы… а то что же изучать чего у вас там, чтобы возможно в результате понять что оно и не нужно вообще ни разу)))
0
Sign up to leave a comment.
Удобный callback