2017 Обновление
Все функции с помощью Function.prototype имеют метод .call
.Причина использования .call()
состоит в том, чтобы указать, на что ссылается переменная "this
".
MDN указывает:
Метод call()
вызывает функцию с даннымэто значение и аргументы предоставляются индивидуально.
Рассмотрим следующее:
function x() {
return this;
}
x()
В строгом режиме x()
возвращает undefined
, в нестрогом режиме возвращает глобальный объект, Window
в контексте браузера.
Пример с .call()
мы говорим ему, что означает "this
":
function x() {
return this;
}
var obj = {
myName : 'Robert',
myLocation : 'Earth'
}
x.call(obj);
Результат: {myName: "Robert", myLocation: "Earth"}
.В приведенном выше примере мы указываем объект obj
в качестве значения this
внутри функции x()
. Он может использоваться для эмуляции наследования в ООП.
Пример:
var Robert = {
name: "Robert Rocha",
age: 12,
height: "5,1",
sex: "male",
describe: function() {
return "This is me " + this.name + " " + this.age + " " + this.height + " " + this.sex;
}
};
Допустим, что приведенное выше является главным объектом (прототипом), и вы хотите наследовать функцию describe
в другом объекте:
var Richard = {
name: "Richard Sash",
age: 25,
height: "6,4",
sex: "male",
}
Объект Richard
не имеетесть функция description, и вы хотите просто унаследовать, так сказать, функцию.Вы бы сделали это так:
console.log( Robert.describe.call( Richard ) );
Вывод: This is me Richard Sash 25 6,4 male