ES6-введение класса
ES6 обеспечивает способ написания, близкий к традиционным языкам, и вводит концепцию класса как шаблона для объектов.С помощью ключевого слова class написание прототипов объектов может быть сделано более ясным и более похожим на синтаксис объектно-ориентированного программирования.
- Класс объявляет класс, а конструктор определяет инициализацию конструктора.
class Phone1 {
constructor(brand, price) {
this.brand = brand;
this.price = price;
}
call() {
console.log('我能打电话');
}
}
let onePlus = new Phone1('1+', 1999);
console.log(onePlus);
Вот разница с конструктором
function Star(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
}
Star.prototype.talent=function(){
console.log('我会演小品');
}
let bp1=new Star('jisoo',25,'女');
console.log(bp1);
Star.talent();
- extends наследует родительский класс, super вызывает родительский метод построения
class Phone {
constructor(brand, price) {
this.brand = brand;
this.price = price;
}
call() {
console.log('我能拍照');
}
}
class SmartPhone extends Phone {//Phone为要继承的父类
constructor(brand, price, color, size) {
super(brand, price);//super里面的属性为继承父类的属性,新的属性在外面补充
this.color = color;
this.size = size;
}
photo() {
console.log('我能拍照');
}
}
let xiaomi = new SmartPhone('xiaomi', 1999, 'red', 15.6);
console.log(xiaomi);
xiaomi.call();
- static определяет статические методы и свойства
/* class静态成员 */
class Star {
//静态属性
static name = 'jisoo';
static habit = function() {
console.log("That's a pity");
}
}
let jisoo = new Star();
console.log(Star.name); //jisoo
console.log(jisoo.name); //undefined
- Метод родительского класса можно переопределить
class Father {
constructor(name, age) {
this.name = name;
this.age = age;
}
money() {
console.log('我能赚钱');
}
}
class Son extends Father {
constructor(name, age, gender) {
super(name, age);
this.gender = gender;
}
money() {
console.log('我也能赚钱');
}
}
let son = new Son('jisoo', 25, '女');
console.log(son);
son.money();