Альтернатива использованию bind (если вам нужно поддерживать старые браузеры и не хотите расширять Function.prototype
) - просто обернуть ваш обратный вызов в функцию immidate и ввести this
в качестве аргумента, подобного этому:
Array.prototype.removeAll = function(array2) {
array2.forEach(function(outer){
return function(item) {
outer.remove(item);
};}(this));
}
или вы можете написать простую служебную функцию карри и использовать как это
function curry() {
var fn = Array.prototype.shift.call(arguments),
args = Array.prototype.slice.call(arguments);
return function curryed() {
return fn.apply(this, args.concat(Array.prototype.slice.call(arguments)));
};
};
Array.prototype.removeAll = function(array2) {
array2.forEach(curry(function(item) {
outer.remove(item);
},this));
}
Если вы не возражаете против расширения Function.prototype
, вы можете использовать связывание, как уже описано другими, вы можете найти отличное расширение совместимости для MDN здесь: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind