This Flashcards
Зачем использовать this, если можно так же обратиться к объекту через точку ?
Такой код ненадёжен. Если мы решим скопировать ссылку на объект user в другую переменную, например, admin = user, и перезапишем переменную user чем-то другим, тогда будет осуществлён доступ к неправильному объекту при вызове метода из admin.
Это показано ниже:
let user = {
name: “John”,
age: 30,
sayHi() {
alert( user.name ); // приведёт к ошибке
}
};
let admin = user;
user = null; // перезапишем переменную для наглядности, теперь она не хранит ссылку на объект.
admin.sayHi(); // TypeError: Cannot read property ‘name’ of null
Что выведет этот код ?
function sayHi() {
alert(this);
}
sayHi();
В строгом режиме (“use strict”) в таком коде значением this будет являться undefined. Если мы попытаемся получить доступ к this.name – это вызовет ошибку.
В нестрогом режиме значением this в таком случае будет глобальный объект (window в браузерe, мы вернёмся к этому позже в главе Глобальный объект). Это – исторически сложившееся поведение this, которое исправляется использованием строгого режима (“use strict”
Что такое функция конструктор ? Какие есть соглашения при создании функции конструктора ? Объясните как работает функция конструктор на примере кода
function User(name) {
this.name = name;
this.isAdmin = false;
}
let user = new User(“Jack”);
alert(user.name); // Jack
alert(user.isAdmin); // false
Мы можем использовать конструкторы для создания множества похожих объектов..есть два соглашения:Имя функции-конструктора должно начинаться с большой буквы.
Функция-конструктор должна выполняться только с помощью оператора “new”.
function User(name) {
// this = {}; (неявно)
// добавляет свойства к this
this.name = name;
this.isAdmin = false;
// return this; (неявно)
}