另一个函数javascript

时间:2018-10-07 05:56:10

标签: javascript javascript-objects

为什么我不能直接使用学生班的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 :(得分:0)

了解原型链。 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 ===人.prototype >>> p1。 proto proto proto === Object.prototype

在链上某处调用函数时,this引用将是实例本身。