Вызов через функцию
Пробуем вывести разными способами имя заданное в передаваемом объекте alina.
let alina= {
name: 'Alina',
anyFunc1() {
console.log(this.name);
},
anyFunc2(namer) {
console.log(namer);
}
};
У нас есть объект alina, со свойством name и двумя методами anyFunc. Мы попытаемся выполнить эти методы в функции, параметром в которую передаем объект содержащий эти методы и посмотрим на результат.
const tempFunc = (obj) => {
let {name, anyFunc1, anyFunc2} = obj;
/*this не относится к obj*/
anyFunc1(); // Null
/*this относится к obj*/
obj.anyFunc1(); // Alina
anyFunc2(name) // Alina
};
tempFunc(alina);
Принимаем в функцию tempFunc параметром объект alina и вызовем его методы разными способами.
anyFunc1() — в этом случае, результат будет null, так как this ссылается на функцию.
obj.anyFunc1() — здесь, результат будет Alina, так как this ссылается на объект который мы передали.
anyFunc2(name) — а здесь мы добавили параметр самому методу и в него передаем свойство name объекта obj. Результат — Alina.
Вызов через класс
Теперь попробуем вывести имя используя класс Person.
Для начала создадим этот класс, затем создадим экземпляр этого класса и передадим аналогичный объект, как передавали в функцию.
let alina = {
name: 'Alina',
anyFunc1() {
console.log(this.name);
},
}
class Person {
constructor({name, anyFunc1}) {
this.name = name;
this.anyFunc1 = anyFunc1;
}
anyFunc2() {
console.log(this.name);
}
};
Создаем экземпляр класса и выводим имя
const UserAlina = new Person(alina);
UserAlina.anyFunc1(); // Alina
UserAlina.anyFunc2(); // Alina
UserAlina.anyFunc1() — здесь мы вызываем метод из переданного объекта.
UserAlina.anyFunc2() — а тут функцию которую создали в классе Person