ES5 和 ES6的繼承
阿新 • • 發佈:2021-07-12
ES5:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<script>
//定義建構函式
function Person(name, age){
this.name=name;
this.age=age;
}
//在原型 prototype 上定義方法
Person.prototype.show= function (){
alert(this.name);
alert(this.age);
};
//用到類的時候,例項化 new 一個
let p = new Person("blue",18);
p.show();
//ES5的繼承-------------------------------------------
//定義子類的建構函式
function Worker(name, age, job){
Person.call(this, name, age);
this.job=job;
}
Worker.prototype =new Person(); //繼承父類的 prototype
//繼承父類的prototype後,自身的 constructor 會亂掉,需要還原一下
Worker.prototype.constructor=Worker;
//新增 Worker 自己的方法
Worker.prototype.showJob=function (){
alert(this.job);
};
let w=new Worker('blue', 18, '打雜的');
w.show();
w.showJob();
</script >
</head>
<body>
</body>
</html>
ES6:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<script>
//ES6的面向物件 ,class 用來專門宣告類的
class Person{
constructor(name, age){ // constructor 建構函式
this.name=name;
this.age=age;
}
show(){ // 直接在class裡面寫方法
alert(this.name);
alert(this.age);
}
}
//ES6的繼承--------------------------------------
class Worker extends Person{ // 告訴系統 Worker 繼承於 Person
constructor(name, age, job){ // 子類的constructor,引數比父類只多不少
super(name, age); //調父類的建構函式,用super關鍵字把需要的父類的引數傳過來,需要什麼就傳什麼
this.job=job; //子類自己的引數
}
showJob(){ //加上自己需要的,子類的方法
alert(this.job);
}
}
//類的使用方法和 ES5 沒什麼不同,例項化
let w=new Worker('blue', 18, '打雜的');
w.show(); //調父類的方法
w.showJob(); //調自己的方法
/*
*/
</script>
</head>
<body>
</body>
</html>