Function User() {
this.firstName = firstname;
this.lastName = lastName;
this. getFullName = function() {
return this.firstName + this.lastName;
}
}
Почему бы без this не писать:
firstName = ...
lastName = ...
JavaScript
Не понимаю смысл указателя this: зачем он нужен, к пример, в данной функции:
this это как можно догадаться из названия ЭТОТ объект.
К примеру:
let user = {
name:"alex"
age:"14"
likeFruit:"banana"
sayHi: function() {
alert("Привет "+this.name+"!")
}
}
user.sayHi() //выведет Привет user!.
Если указать именно: alert("Привет "+uset.name+"!"), то при другом названии объекта (к примеру андрей) метод работать не будет.
this = Это. Или можно сказать контекст.
К примеру:
let user = {
name:"alex"
age:"14"
likeFruit:"banana"
sayHi: function() {
alert("Привет "+this.name+"!")
}
}
user.sayHi() //выведет Привет user!.
Если указать именно: alert("Привет "+uset.name+"!"), то при другом названии объекта (к примеру андрей) метод работать не будет.
this = Это. Или можно сказать контекст.
function getThis() {
console.log(this);
}
var obj = {
prop: 1,
prop2: 2
}
window.getThis();
getThis.call(obj)
>>>
Результат вызова будет различаться

console.log(this);
}
var obj = {
prop: 1,
prop2: 2
}
window.getThis();
getThis.call(obj)
>>>
Результат вызова будет различаться

Бауыржан Тулегенов
console.log(this) - подразумевается, что выведется именно функция getThis, так? Если да, то какой смысл в этом this, если итак очевидно, что выведется данная функция, не говоря о том, что кроме нее других нет?
> Почему бы без this не писать...
Потому что, внезапно, это будет работать по другому.
При вызове функции-конструктора, this ссылается на объект, который сейчас создается.
let one = {
a: 5,
b: 10,
};
/***/
function Test() {
this.a = 5;
this.b = 10;
}
let two = new Test();
console.log( JSON.stringify(one) === JSON.stringify(two) ); // true;
// На выходе получаются два объекта одинакового содержания.
Конструкторы нужны, чтобы каждый раз из разных мест кода руками не прописывать объект через { ...}
>> Почему бы без this не писать:
Можно без this. При вызове функции, this ссылается на "объект перед точкой".
Если писать
function User() {
let firstName = "firstname";
let lastName = "lastName";
this. getFullName = function() {
return this.firstName + this.lastName;
}
}
let user = new User();
console.log( user.getFullName() ); // NaN
При вызове функции, this — ссылка на объект user.
this.firstName + this.lastName; работает как user.firstName + user.lastName;
user.firstName — undefined (такого свойства в объекте нет), получается
undefined + undefined = NaN.
______________________________
Можно убрать this и из функции:
function User() {
let firstName = "AAA";
let lastName = "BBB";
this. getFullName = function() {
return firstName + lastName;
}
}
let user = new User();
console.log( user.getFullName() ); // "AAABBB"
Называется замыкание - функция запоминает переменные из окружения, где она была объявлена. Функция уже будет работать, но это просто разные вещи. А у объекта по прежнему не будет свойств,
console.log( user.firstName ); // undefined
_____________
А при вызове функции из вопроса - будет доступ к user.firstName и user.lastName по отдельности.
Потому что, внезапно, это будет работать по другому.
При вызове функции-конструктора, this ссылается на объект, который сейчас создается.
let one = {
a: 5,
b: 10,
};
/***/
function Test() {
this.a = 5;
this.b = 10;
}
let two = new Test();
console.log( JSON.stringify(one) === JSON.stringify(two) ); // true;
// На выходе получаются два объекта одинакового содержания.
Конструкторы нужны, чтобы каждый раз из разных мест кода руками не прописывать объект через { ...}
>> Почему бы без this не писать:
Можно без this. При вызове функции, this ссылается на "объект перед точкой".
Если писать
function User() {
let firstName = "firstname";
let lastName = "lastName";
this. getFullName = function() {
return this.firstName + this.lastName;
}
}
let user = new User();
console.log( user.getFullName() ); // NaN
При вызове функции, this — ссылка на объект user.
this.firstName + this.lastName; работает как user.firstName + user.lastName;
user.firstName — undefined (такого свойства в объекте нет), получается
undefined + undefined = NaN.
______________________________
Можно убрать this и из функции:
function User() {
let firstName = "AAA";
let lastName = "BBB";
this. getFullName = function() {
return firstName + lastName;
}
}
let user = new User();
console.log( user.getFullName() ); // "AAABBB"
Называется замыкание - функция запоминает переменные из окружения, где она была объявлена. Функция уже будет работать, но это просто разные вещи. А у объекта по прежнему не будет свойств,
console.log( user.firstName ); // undefined
_____________
А при вызове функции из вопроса - будет доступ к user.firstName и user.lastName по отдельности.
Ты же сам вырвал конструктор из контекста в котором он создавался и спрашиваешь у нас зачем он нужен. Если не понимаешь сейчас, пока забей, поймёшь потом.
Похожие вопросы
- Я не понимаю... Зачем нужен this в javascript?
- Можете привести примеры функции перемешивания массива в javascript? -_-
- Зачем нужны функции в js?
- Калькулятор из функций
- Вопрос по JavaScript, обращение к функции, которая находится в функции...
- Почему функция постоянно возвращает true или false? (но не должна)
- Проверка вызывалась ли функция (подробности внутри)
- Возврат, Задержка, и потерянный This (подробности внутри)
- Подскажите про JavaScript про this
- Как в данном случае лучше заменить стрелочную функцию на обычную?