Class的概念
一、簡介
javaScript是面向對象的編程語言,可以說所以的能夠被描述的事、物或抽象的東西,都是可以是對象。而我們記錄的對象,會有具有同樣的屬性和行為。
為了節省重寫相同的代碼。就產生了class模板。
舉例:
這里有一把槍, 槍的種類很多,有步槍,機關槍,阻擊槍....。但是無論怎么說,這些都是槍的概念,如果把這種抽象的概念剝離出來,就是我們經常說的“類”。那么槍有什么特點呢? 威力大小,型號,長度,子彈型號,能承載子彈的數量,槍口半徑......ok! 這些一切的一切都是為了描素槍,把這些抽象出來,就組成了“槍類”的屬性。槍又能干什么呢? 瞄准,開火,....這些描素都是槍的功能-----把這些抽象出來,即組成了一個類的方法。
二、Class學習
二 . 1 Class和function的區別;
二.1.1 class的特點
使用class關鍵字創建的組件,有自己的私有數據(this.state)和生命周期函數,有狀態;
class中有默認執行函數 " constructor (){} " ,並且還有一個靜態屬性只屬於class的"static"靜態屬性和靜態方法;
class中的super關鍵字,是用來繼承父類的,屬性和方法,如果在子類和父類都有constructor的時候,super則是先執行父類的constructor,再執行子類的constructor。
“this”指向問題,class中的this指向實例時的對象。
“static"指向class,它是屬於class的數據。
二.1.2 function的特點
使用function創建的組件,只有props,沒有自己的私有數據和生命周期函數,無狀態;
小結:組件有沒有狀態是根據有沒有 ‘state’屬性,所以class創建的組件為有狀態【有狀態】,而用構造函數創建的組件沒有狀態【無狀態】。如果一個組件需要有自己的私有數據,則推薦使用 :class創建的有狀態組件;如果一個組件不需要私有的數據,則推薦使用,無狀態組件;React 官方說:無狀態組件,由於沒有自己的state和生命周期函數,所以運行效率會比又狀態組件稍微高一些;
二 . 2 組件中的props和state、data之間的區別。
二.2.1 props是什么?
props是從外部傳進來的數據,並且props是只讀數據,只可以讀取不能重新賦值。
二.2.2 state和data是什么?
state和data都屬於組件的私有屬性,(通過ajax獲取回來的數據一般都為私有數據),並且數據是可以重新賦值。
三、class的使用
// 創建一個類存放特有的屬性和方法,用來實例對象。 class Student{ // 靜態屬性只屬於Student的屬性 static p = "靜態屬性"; // 靜態方法只屬於Student的方法 static m(){ console.log("靜態方法") } // 構造方法 constructor(props){ //實例屬性 this.name=props.name; this.age=props.age; this.sex=props.sex; } // 實例方法 students(){ console.log(this.name) console.log(this.age) console.log(this.sex) } xue(){ console.log(this.name,"學習使我進步!") } wan(){ console.log(this.name,"你真調皮~") } xiao(){ console.log(this.name,"哈哈哈~") } } Student.m() console.log(Student.p) // 實例化對象 var obj={name:"小紅",age:20,sex:"女"} var S1 = new Student({...obj}); // 調用方法 S1.students() S1.xue() S1.xiao()
//實例化對象 var obj={name:"小明",age:22,sex:"男"} var S2 = new Student({...obj}); S2.students() S2.wan()