Я искал в stackoverflow и в Интернете, не смог получить правильные результаты или объяснение разницы между этими тремя методами.Разница между привязкой, применением и вызовом метода?
Насколько я понимаю, все они делают то же самое выполнение function/method in different context.
var google = {
makeBeer : function(arg1,arg2){
alert([arg1, arg2]);
}
}
google.makeBeer('water','soda');
Это моя нормальная функция объекта Google. Теперь, когда я использую метод вызова и связывания здесь, вот вывод.
var google = {
makeBeer: function (arg1, arg2) {
alert([arg1, arg2]);
}
}
google.makeBeer('water', 'soda');
function yahoo() {}
var yah = new yahoo();
google.makeBeer.call(yah, 'pepsi', 'coke');
function msn() {
}
var msn = new msn();
google.makeBeer.call(msn, 'sprite', 'limca');
Я до сих пор не вижу цель сделать это, я могу идти вперед и называть google.makeBeer three times with different arguments.
Может кто-нибудь просветить меня больше по этому поводу.
В не делает разницу в вашем примере, потому что 'google.makeBeer' не использовать' this'. При вызове 'google.makeBeer (...);', 'this' внутри функции будет ссылаться на' google'. Когда вызывается как 'google.makeBeer.call (yah, ...);', 'this' будет ссылаться на' yah'. 'bind' фактически не выполняет функцию, он создает новую функцию, где' this' и необязательно некоторые параметры привязаны к переданным аргументам. См. Https: //developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this и https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind –
Я думаю, что основное различие между DOM методы '.call()' и '.apply()' - количество аргументов, которые могут быть переданы (один из них позволяет, по-моему, еще один). Я не уверен, что относится к '.bind()', но часто относится к событиям, а их обработчики «привязаны». –