Задание "Реализуем методы".

Всем привет!
Почему здесь в конце myComputer.getDescription() а не сomputer.getDescription() ?

Знаю, что можно объект.метод(), а что функция.метод() впервые встречаю.

Получается вызывают метод, который находится в объекте, который находится в функции через вызов функции, а потом название объекта.

Так можно?
Где про это почитать?
Спасибо.

var buildComputer = function (memory, display, processor) {
var computer = {
basicPrice: 5000,
processor: processor,
display: display,
memory: memory,

getDescription: function () {
  return 'компьютер';
}

};

return computer;
};

var myComputer = buildComputer(8, 13, ‘i7’);
console.log('В корзине ’ + myComputer.getDescription());

1 лайк

Что-то здесь запутано.
Вы обращаетесь к свойству объекта, значением которого является функция.

Вот я не видела нигде, что так можно. Где про это почитать? Если можете дайте ссылочку.

Что вы считаете необычным здесь? То, что значением свойства объекта является функция?

То что мы вызываем метод через функцию так: myComputer.getDescription()

myComputer, а не computer.getDescription()

Правильно. Потому что переменная computer (ее значением является объект) создана внутри функции buildComputer.
А потом вы вызываете эту функцию и создаете свой объект, и у него другое имя - myComputer. Вы можете посмотреть на него, написав вывод в консоль - console.log(myComputer);
То есть, обращаясь к свойству getDescription(), вы хотите получить доступ к свойству созданного вами объекта, а не того, что создан в функции buildComputer как каркас.

Ага спасибо. Попробовала.

То есть получается, что если объект внутри функции, то мы не можем вызвать его как объект.свойство, а только как функция.свойство объекта. Верно?

Попробовала вызвать как объект.свойство и выдает каждый раз ошибку.

Не пойму, почему этот нюанс в курсе не объясняется? Перечитала, не увидела нигде.

Дело не в этом. Просто вы не можете получить доступ к переменной computer за пределами функции. То есть есть разница, где вы напишете console.log(computer.getDescription()); - внутри функции buildComputer или после нее.

Ааа то есть если объект внутри функции, то он работает только внутри неё. А если внешний то и вне.

Вроде начинаю понимать.

Только не до конца поняла про то, что когда я вызываю извне функцию, то как это создает новый объект myComputer? Я ж его нигде не прописываю.
Как я понимаю myComputer - это переменная которая заменяет ВСЮ функцию сразу.

можно, но как это делается вам знать сейчас не нужно, это более продвинутый уровень.

Доступ к внутреннему объекту достигается только за счет того, что он возвращается наружу. Именно этот объект и присваивается переменной myComputer

ну да, запустив функцию снаружи, мы запускаем и объект.

Но логику вызова через функцию до конца все равно не могу понять. Наверное просто нужно запомнить это правило.

что значит запускаем объект? при вызове функции он создается и возвращается наружу. Вместо него могла быть цифра или строка, не важно, а результат выполнения функции уже присваивается переменной. Ничего запоминать здесь не нужно, нужно понять

1 лайк

Мм…
А если б в функции было 3 объекта и в каждом по 1 методу с одинаковым названием getDescription?
Мы бы тогда если обращались к функции было б непонятно из какого объекта берем этот метод.

Из того, который возвращался бы

Правильно ли я понял:

  1. var myComputer = buildComputer(8, 13, ‘i7’) - присваивает объект, т.к. функция вызывается и возвращает объект. Следовательно в myComputer присваивается то что вернулось при исполнении функции, т.е. объект computer?
  2. var myComputer = buildComputer - здесь же присваивается функция, т.к. вызова функции нет и мы просто даем ей еще одну переменную?
1 лайк