學JS的心路歷程 - JS的Class
沒錯,你沒有看錯,雖然前面說JS是原型繼承,但在ES6以後新增了class關鍵字!!!
不過底層實作仍然是以原型繼承方式進行,所以基本上算是一個語法糖。
今天我們就來看一下如何使用吧!
class
首先先來看一個最簡單的class例子。
class Person{
constructor(val){
this.age = val;
}
say(){
return“Hi!”;
}
}
var Jason = new Person(29);
Jason instanceof Person;//true
Jason.age;//29
Jason.say();//“Hi!”
在類別(class)中可以明確定義一個建構式函式,會在建立新的Person物件時被呼叫,在類別主體內也能直接新增方法。
當然我們也可以用原本的原型繼承來寫。
function Person(val){
this.age = val;
}
Person.prototype.say =“HI!”;
var Jason = new Person(29);
但是,要註意如果用類別的話要註意Hoisting的問題!!
var Jason = new Person(29);//ReferenceError: Person is not defined
class Person{
constructor(val){
this.age = val;
}
say(){
return“Hi!”;
}
}
靜態方法Static methods
一個類別的靜態方法,不需要被實例化就可以被呼叫,不過也無法被實例化的新物件使用,也就是只能類別層級使用(vmwork)。
class Person{
constructor(val){
this.age = val;
}
say(){
return“Hi!”;
}
static evilThink(){
return“I want steal somthing”
}
}
var Jason = new Person(29);
“evilThink”in Jason;//false
Person.evilThink();//“I want steal somthing”
用原型繼承可以這樣寫。
function Person(val){
this.age = val;
}
Person.evilThink = function(){
return“I want steal somthing”
}
Person.prototype.say = function(){
return“HI!”;
}
var Jason = new Person(29);
“evilThink”in Jason;//false
Person.evilThink();//“I want steal somthing”
extends建立子類別
可以用extends建立子類別。
class Person{
constructor(age,weight){
this.age = age;
this.weight = weight;
}
say(){
return“Hi!”;
}
}
class trickyMan extends Person{
say(){
return“R~”
}
}
var Jason = new trickyMan(29,96);
Jason instanceof Person;//true
Jason instanceof trickyMan;//true
Jason.say();//“R~”
用原型繼承則是這樣寫。
function Person(age,weight){
this.age = age;
this.weight = weight;
}
Person.prototype.say = function(){
return“HI!”;
}
function tricky(){}
tricky.prototype.say = function(){
return“R~”;
}
var Jason = new tricky(29);
Jason.say();//“R~”
super呼叫父類別
如果要在子類別呼叫父類別可以用super。
class Person{
constructor(age,weight){
this.age = age;
this.weight = weight;
}
say(){
return“Hi!”;
}
}
class trickyMan extends Person{
say(){
return super.say();
}
}
var Jason = new trickyMan(29,96);
Jason.say();//“HI!”
如果用原型繼承來寫的話。
function Person(age,weight){
this.age = age;
this.weight = weight;
}
Person.prototype.say = function(){
return“HI!”;
}
function tricky(){}
tricky.prototype.say = function(){
return Person.prototype.say()
}
var Jason = new tricky(29);
Jason.say();//“HI!”
以上就是class的用法,一樣如果有錯誤及來源未附上也歡迎留言指正,那麽我們明天見(leafor)。
學JS的心路歷程 - JS的Class