Метод call()

С методом call() вы можете вызывать любые методы для использования с разными объектами.

Все функции — методы

В JavaScript все функции являются методами объектов.

Если какая-то функция не является методом какого-либо объекта JavaScript, то это функция глобального объекта.

В следующем примере создается объект с 3 свойствами – firstName, lastName, fullName:


var person = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }
}
person.fullName();         // вернет "John Doe" 

Ключевое слово this

В определении функции ключевое слово this ссылается на "владельца" этой функции.

В предыдущем примере this – это объект person, который "владеет" функцией fullName.

Другими словами выражение this.firstName означает свойство firstName этого объекта.

Подробнее см. главу Ключевое слово this.

JavaScript метод call()

Метод call() это предопределенный метод JavaScript. Он может использоваться для вызова любого метода с любым владельцем объекта в качестве аргумента (параметра).

Благодаря методу call() любой объект может использовать методы, принадлежащие другому объекту.

В следующем примере вызывается метод fullName, принадлежащий объекту person, для использования с объектом person1:


var person = {
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
}
var person1 = {
    firstName:"John",
    lastName: "Doe",
}
var person2 = {
    firstName:"Mary",
    lastName: "Doe",
}
person.fullName.call(person1);  // вернет "John Doe" 

В следующем примере вызывается метод fullName, принадлежащий объекту person, для использования с объектом person2:


var person = {
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
}
var person1 = {
    firstName:"John",
    lastName: "Doe",
}
var person2 = {
    firstName:"Mary",
    lastName: "Doe",
}
person.fullName.call(person2);  // вернет "Mary Doe" 

Метод call() с аргументам

Метод call() может принимать аргументы:


var person = {
    fullName: function(city, country) {
        return this.firstName + " " + this.lastName  + "," + city + "," + country;
    }
}
var person1 = {
    firstName:"John",
    lastName: "Doe",
}
 person.fullName.call(person1, "Oslo", "Norway");