Завершаем тему с классами. Итак, третья причина, по которой классы нельзя назвать «синтаксическим сахаром».
📌 Код класса всегда выполняется в strict mode, и нет ни одного способа выполнить его иначе, в отличие от функции-конструктора. Как мы можем доказать это?
Первое, что приходит на ум — вспомнить, что this в строгом режиме всегда равен undefined. Поэтому нам необходимо использовать его так, чтобы он не являлся методом объекта. Для этого достаточно указать его внутри колбэка какой-либо функции, которая будет внутри метода. Оператор цикла forEach — отличный помощник в нашем примере.
function UserFn(name, age) {
this.name = name;
this.age = age;
return {
name,
age,
greet() {
[0].forEach(function () {
console.log(this);
});
},
};
}
class UserClass {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
[0].forEach(function () {
console.log(this);
});
}
}
const UserFromFunction = new UserFn('John', 25);
const UserFromClass = new UserClass('John', 25);
console.log(UserFromFunction.greet()); // object Window
console.log(UserFromClass.greet()); // undefined
Теперь вы знаете чуть больше о классах — эта информация пригодится вам на пути становления JS-сэнсэями. Если остались вопросы или просто хотите поболтать о сахаре, пишите в комментарии⬇️.
