Осваиваю прототипы, чтобы точно понимать как работают классы в ES6.
Прохожу тестовые задания.
Попалось вот такое:
// Поправить код, чтобы функция приветствия возвращала ожидаемое значение
function Person(name){
this.name = name;
}
Person.prototype.greet = function(otherName){
return "Hi " + otherName + ", my name is " + name;
}
И я вообще в ступор встал.
Что надо сделать, чтобы код заработал?
функция, это объект, который содержит ссылки на два другие объекта this и prototype.
то есть можно представить это в виде -
var function = {
this: {},
prototype: {}
};
и когда Вы в конструкторе создали переменную name, то положили её в объект this.
Так же Вы прототипе объекта (у меня function у вас Person) создали свойство ссылающее на функцию greet и теперь эта функция считается методом объекта Person. то есть когда просто где-то то это функция, когда у чего-то, в даном случаи у объекта, то это метод. А дальше в методе greet Вы обращаетесь к свойству (кстати когда переменная не имеет контекста, то это переменная, а когда имеет, как в данном случаи name объявлена в контексте this, то она становится свойством объекта) name, то есть к name объявленному в конструкторе.
Стоит также упомянуть что убрав метода greet его контекст выбросится исключения, так как контекста this со свойство name уже не будет.