Объясните, для чего предназначена и каким образом работает следующая функция:
function bind(method, context) {
var args = Array.prototype.slice.call(arguments, 2);
return function() {
var a = args.concat(
Array.prototype.slice.call(arguments, 0));
return method.apply(context, a);
}
}
Решение.
// Функция bind предназначена для связывания метода с объектом, для того, чтобы этот метод можно было вызвать применительно к данному объекту.
function bind(method, context) { // Функция bind принимает 2 аргумента: method - функция или метод, какого-либо объекта и context - объект для которого быдет вызвана данная функция или метод.
var args = Array.prototype.slice.call(arguments, 2); // Поскольку функция bind может принимать более двух аргументов, то мы вырезаем помещаем все аргументы, идущие после аргументов method и context в отдельный массив args. Поскольку arguments не являются обычным массивом и потому не имеет метода slice, то мы заимствуем метод slice из Array.prototype.
return function() { // Функция bind возвращает безымянную (анонимную) функцию, которая в случае своего вызова выполнит вызов переданной функции method применительно к переданному объекту context.
var a = args.concat(Array.prototype.slice.call(arguments, 0)); // Полученный ранее массив аргументов, идущих после method и context мы объединяем со всем массивом аргументов, переданных в возвращаемую безымянную функцию, если они вдруг будут переданы. Поскольку arguments не являются обычным массивом, то мы опять заимствуем метод slice из Array.prototype.
return method.apply(context, a); // Безымянная функция при своем вызове возвратит результат от выполнения переданной в качестве аргумента функции method, вызванной применительно к переданному объекту context. При вызове функции method в нее будут переданы полученные ранее аргументы в формате массива args, поскольку используется метод apply.
}
}
Комментариев нет:
Отправить комментарий