Возможность использовать и манипулировать «этой» функцией является ключом к хорошему объектно-ориентированному программированию на Javascript.
«this» обычно назначается автоматически в соответствии с областью действия, но ниже 3 функций могут изменить значение «this».
- вызов
- применять
- связывать
Важное примечание:
«call» и «apply» выполняют функцию. «bind» возвращает функцию.
вызов
«call()» выполняет функцию с определенным объектом, который будет использоваться в качестве «этого» и с определенными параметрами.
var num = 1; var obj = {num: 100}; var addTothis = function(a, b) { return this.num + a + b; } addTothis(100, 200); // 301 addTothis.call(obj, 100, 200); // 400
применять
Та же концепция, что и у «call()», но дополнительные аргументы передаются в виде списка.
var num = 1; var obj = {num: 100}; var addTothis = function(a, b) { return this.num + a + b; } addTothis(100, 200); // 301 // call addTothis.call(obj, 100, 200); // 400 // apply var arr = [100, 200]; addTothis.apply(obj, arr); // 400
связывать
«bind» просто возвращает функцию, которая использует предоставленный объект для «этого».
var num = 1; var obj = {num: 100}; var addTothis = function(a, b) { return this.num + a + b; } addTothis(100, 200); // 301 // call addTothis.call(obj, 100, 200); // 400 // apply var arr = [100, 200]; addTothis.apply(obj, arr); // 400 // bind var boundedAddTothis = addTothis.bind(obj); boundedAddTothis(100, 200); // 100 + 100 + 200 = 400 // bind example with extra parameters var boundedAddTothis2 = addTothis.bind(obj, 1, 2); boundedAddTothis2(); // 100 + 1 + 2 = 103