Разница между this.functoinName и functionName внутри другой функции javascript - PullRequest
0 голосов
/ 07 октября 2018

Почему я не могу использовать getName () из ученического класса напрямую вместо this.getName () ??

Насколько я понимаю, getName () является публичной функцией, которая может быть доступна из ее дочерних классов,Может ли кто-нибудь добавить больше о том, какая именно разница, если я не использую это в этом сценарииЭто может быть основной вопрос из JAVAScript, как начинающий, трудно понять сценарий.Спасибо за помощь заранее.

class person{
  constructor(name){
    this.name=name;
  }
  getName(){
    return "Name of the person is "+ this.name;
  }
}

class student extends person{
  constructor(name,age){
     super(name);
     this.age=age;
   }
  getAge(){
     return "Age is "+ this.age;
   }
  getDetails(){
     return this.getName()+ ", "+ this.getAge();
   }
 }

var p1=new student("ram",21);
console.log(p1.getDetails());

1 Ответ

0 голосов
/ 07 октября 2018

Читайте о прототипе цепи.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

В вашем случае вы можете вызвать super.getName () или this.getName ().

Когда вы получаете доступ к объекту, он будет искать прямые свойства (ownProperties)), если с именем нет ни одного, он будет искать его в прототипе.Если все еще не найден, он будет смотреть дальше вниз по следующему прототипу в цепочке, пока не достигнет последнего прототипа, вероятно, Object.prototype.

Ваша цепочка будет p1. proto ==== student.prototype >>> p1. proto . proto === person.prototype >>> p1. proto . proto . proto === Object.prototype

При вызове функции где-нибудь в цепочке ссылкой this будет сам экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...