本章帶給大家Java什麼是類別? class的相關介紹,讓大家了解一些關於類別(class)的知識。有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
class Point{ constructor(){ } toString(){ } } console.log(Object.keys(Point.prototype)) console.log(Object.getOwnPropertyNames(Point.prototype))
上面就是一個類別
1、類別的資料型別就是函數,類別本身就指向建構子
console.log(typeof Point) // "function" console.log(Point ===Point.prototype.constructor) // true
2、建構子的prototype 屬性在ES6 的“類”上繼續存在。事實上,類別的所有方法都定義在類別的 prototype 屬性上。
開頭的程式碼等同於
class Point{} Point.prototype = { constructor() {}, toString() {}, }
由於類別的方法(除 constructor 以外)都定義在 prototype 物件上,所以類別的新方法可以添加在 prototype 物件上。 Object.assign 方法可以一次的向類別新增多個方法
很重要的一點,類別的內部定義的所有方法都是不可列舉的。
console.log(Object.keys(Point.prototype)) // [] console.log(Object.getOwnPropertyNames(Point.prototype)) // ["constructor", "toString"]
其中,Object.keys() 傳回一個數組,包含物件本身所有可枚舉屬性,不包含Symbol,Object.getOwnPropertyNames() 傳回一個數組,包含自身所有屬性,不包含Symbol
3、constructor方法
constructor 方法是類別的預設方法,透過new 指令產生物件實例是自動呼叫該方法。一個類別必須有 constructor 方法,如果沒有定義,一個空的 constructor 方法會被預設為新增。
constructor 方法預設回傳實例對象,也就是 this 的指向。不過完全可以指定回傳另外一個物件
4、繼承
class ColorPoint extends Point { constructor(x, y, color) { super(x, y) // 调用父类的 constructor(x, y) this.color = color } toString() { return this.color + '' + super.toString() // 调用父类的 toString() } }
看到extends 是不是很熟悉,用過React 的人肯定知道,在React 的ES6 寫法中我們常常這樣寫
class XXXXX extends Component{}
ColorPoint 透過extends 可以繼承Point 類別的所有屬性和方法
有沒有留意到constructor 和toString方法中都出現了super 關鍵字,他指父類別的實例。
子類別必須在 constructor 方法中呼叫 super 方法,否則新實例就會報錯。因為子類別沒有自己的 this 對象,而是繼承了父類別的 this 對象,如果不呼叫 super ,子類別就無法得到 this。
其實 class 就是對物件原型的一種更簡潔的寫法
以上是Java什麼是類別? class的相關介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!