better2021 / Blog

个人博客
https://feiyuweb.me/Blog
1 stars 0 forks source link

原型继承和class语法糖 #28

Open better2021 opened 4 years ago

better2021 commented 4 years ago

原型继承和class语法糖

// class是原型继承的语法糖
class person {
  constructor(name, sex, age) {
    this.name = name;
    this.sex = sex || 'gril';
    this.age = age;
  }
  /* static 是静态方法,外部实例不能调用,表示该方法不会被实例继承, 
  而是直接通过类来调用, 这就称为“ 静态方法”*/
  static play() {
    console.log(this.name + '在打网球');
  }

  walk() {
    console.log(`${this.name}在走路`);
    play();
  }
  speack() {
    console.log(`${this.name} 是 ${this.sex}`);
  }
  isAdult() {
    if (this.age > 18) {
      console.log(`${this.name} 是成年人`);
    } else {
      console.log(`${this.name} 是未成年`);
    }
  }
}

let per = new person('小明', 'boy', 25);
let li = new person('lili', 'gril', 16);
console.log(per.name);
per.isAdult();
li.isAdult();
per.speack();

person.play(); // 静态方法直接通过类来调用

// 原型继承
function people(name, sex, age = 18) {
  this.name = name;
  this.sex = sex;
  this.age = age;
}

// 在原型上添加方法
people.prototype.say = function () {
  console.log(`${this.name} 是 ${this.sex}`);
};

people.prototype.isAdult = function () {
  if (this.age >= 18) {
    console.log(`${this.name} 是成年人`);
  } else {
    console.log(`${this.name} 是未成年`);
  }
};

let jon = new people('haha', 'boy');
jon.isAdult();