js面向对象编程

class Person {
  
  constructor(name,age){
    this.name = name;
    this.age = age;
  }
  // 思考: speak对象放在了哪里? ----类的原型对象(prototype)上(实例对象上面没有),供实例使用。
  speak(){
    console.log(`I am ${this.name}, ${this.age} years old.`);
  }

}

// 继承
class Student extends Person {
  // constructor也可以不写,如果写了就必须有super来继承父亲的属性
  constructor(name,age,grade){
    super(name,age); // 如果是继承,则必须有super继承父类当中的属性
    this.grade = grade;
  }
  speak(){
    console.log(‘重写了父类继承过来的方法!‘)
  }
  study(){
    // 思考??: study方法放在了哪里? --累的原型对象上,供实例使用
    console.log(‘studying...‘);
  }
}

// Instantiation
let p1 = new Person(‘Jone‘, 18);
let p2 = new Student(‘Mary‘,16, 3); // 如果调用了子类中的不存在方法,会顺着原型链查找,查找父亲节点有没有。
p1.speak();
p2.speak();


// p1.speak.call(someObject) // call()可以更改某个类的方法的this对象

// ===========================

js面向对象编程

上一篇:js中字符串的常用方法


下一篇:利用js判断文件是否为utf-8编码