本章給大家帶來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 就是對對象原型的一種更加簡潔的寫法