This Flashcards

1
Q

Зачем использовать this, если можно так же обратиться к объекту через точку ?

A

Такой код ненадёжен. Если мы решим скопировать ссылку на объект 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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что выведет этот код ?
function sayHi() {
alert(this);
}

sayHi();

A

В строгом режиме (“use strict”) в таком коде значением this будет являться undefined. Если мы попытаемся получить доступ к this.name – это вызовет ошибку.

В нестрогом режиме значением this в таком случае будет глобальный объект (window в браузерe, мы вернёмся к этому позже в главе Глобальный объект). Это – исторически сложившееся поведение this, которое исправляется использованием строгого режима (“use strict”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое функция конструктор ? Какие есть соглашения при создании функции конструктора ? Объясните как работает функция конструктор на примере кода

function User(name) {
this.name = name;
this.isAdmin = false;
}

let user = new User(“Jack”);

alert(user.name); // Jack
alert(user.isAdmin); // false

A

Мы можем использовать конструкторы для создания множества похожих объектов..есть два соглашения:Имя функции-конструктора должно начинаться с большой буквы.
Функция-конструктор должна выполняться только с помощью оператора “new”.

function User(name) {
// this = {}; (неявно)

// добавляет свойства к this
this.name = name;
this.isAdmin = false;

// return this; (неявно)
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly