Методите в обекта обикновено изискват да се използват свойствата на обекта, за да се изпълни всяка сложна логика или да се върне каквато и да е стойност.

Да вземем пример за потребителски обект. Потребителски обект може да има свойства като име, фамилия, възраст, имейл адрес и др.

const user = {
  first_name:"Adam",
  last_name:"Smith",
  age:26,
  email_id:"[email protected]"
}

Нека добавим метод към потребителския обект, който връща въведение за потребителя. За да върне подробностите за потребителя, методът трябва да има достъп до свойствата на потребителския обект, как може методът да има достъп до него. Има 2 начина:

Препращане към него чрез обект

const user = {
  first_name:"Adam",
  last_name:"Smith",
  age:26,
  email_id:"[email protected]",
  getUserDetails: function (){
    return `Hi I am ${user.first_name} ${user.last_name}.`
  }
}

Сега методът може да има достъп до свойствата на обекта чрез външна променлива. Но има проблем с този подход. Когато този обект е присвоен на друга променлива и оригиналният обект е зададен на нещо друго или недефинирано. Погледнете кода по-долу:

let user = {
  first_name:"Adam",
  last_name:"Smith",
  age:26,
  email_id:"[email protected]",
  getUserDetails: function (){
    return `Hi I am ${user.first_name} ${user.last_name}.`
  }
}
console.log(user.getUserDetails()); //Hi I am Adam Smith.

const differentUser = user;
user = null;

console.log(differentUser.getUserDetails()) //error.

Кодът по-горе ще даде грешка, когато се опитаме да извикаме getUserDetails с помощта на обект „differentUser“, тъй като вътре в „getUserDetails“ се опитва да получи достъп до first_name и last_name чрез обект „user“, който е зададен на null в реда по-горе. За да коригираме грешката, можем да използваме втория начин.

"това"

“this” е препратка към обекта, който е използван за извикване на метода.

const user = {
  first_name:"Adam",
  last_name:"Smith",
  age:26,
  email_id:"[email protected]",
  getUserDetails: function (){
    return `Hi I am ${this.first_name} ${this.last_name}.`
  }
}
console.log(user.getUserDetails()); //this is user

това“ не е обвързано в javascript. За разлика от други езици в JavaScript “this” не е обвързан, той е наличен във функции, които не са метод към нито един обект. Стойността му се оценява по време на изпълнение. Погледнете кода по-долу:

const user1 = {
  name: "John Doe"
}
const user2 = {
  name: "Adam Smith"
}

function display(){
  console.log(this.name);
}

user1.display = display;
user2.display = display;

user1.display();// "John Doe"
user2.display();// "Adam Smith"

В строг режим, ако извикаме функция без обект: “this” ще бъде недефиниран.