es6的面向對象

es6的classes

構造方法:constructor。new的時候調用
class Student{
    constructor (name,age){
        this.name=name;
        this.age=age;
    }
    run(){
        return this.name;
    }
}
let xs = new Student("姜姜",23);
console.log(xs.name);
console.log(xs.age);

function Vehicle (name,age){
    this.name = name;
    this.age = age;
}
Vehicle.prototype.name = function name(){
    return this.name;
};
var jj = new Vehicle ("吳建",24);
console.log(jj.name);

get set
class Student{
    constructor (name,age){
        this.name =name;
        this.age=age;
    }
    run(){
        console.log("我會飛");
    }
    get xm(){
        return this.name +"123";
    }
    set xm(value){
        this.name =value;
    }
    static shangxue (){
        console.log("去上學");
    }
}
let xs = new Student("姜姜",25);
console.log(xs.xm);
xs.xm="姜姜";
console.log(xs.xm);
Student.shangxue();
//get:獲取加賦值。
//set:設置。
//static:靜態方法|類方法。
//set和get的方法名相同,並且能夠同名

方法重載|方法覆蓋:
class Student{
    constructor (name,age){
        this.name =name;
        this.age=age;
    }
    run(){
        console.log("我會飛");
    }
}
let xs = new Student("姜姜",25);

class Teacher extends Student{
    constructor (name,age,sex){
        super(name,age);
        this.sex=sex;
    }
    eat(){
        console.log(this.name +"is eating")
    }
    run(){
        super.run();
        console.log("我想高飛");
    }
}
var ls = new Teacher("吳建","30","男");
ls.run();//我會飛 我想高飛;
註釋:雖然子類繼承了父類的run方法,可是子類會把父類的方法給覆蓋掉,這個就是方法覆蓋

繼承export
命名規範 —name 私有屬性
static靜態方法 方法覆蓋
ES6 中有 class 語法。值得注意是,這裏的 class 不是新的對象繼承模型,它只是原型鏈的語法糖表現形式。
extends 容許一個子類繼承父類,須要注意的是,子類的 constructor 函數中須要執行 super() 函數。
關鍵字 class, extends, super
特色
  1. 非聲明提高(hoisted) 和let同樣javascript

  2. 自動處於嚴格模式java

  3. 須要new, 不然會拋錯es6

  4. 重寫類名和方法會拋錯函數

  5. 有get set 方法this

  6. 能夠指定方法爲static 。只能在class內部使用。prototype

相關文章
相關標籤/搜索