class:類,是對象的模板。(或者叫:原型) this:當前對象。 以上定義,與java中的概念是相同的。 可是,因爲javascript語言自身的特色,關於class與this,還須要作進一步說明。
注意:在javascript中,在定義類完畢以後,還能夠再添加屬性和方法。
屬性與方法添加到this上
class Point {javascript
constructor() { }}let p = new Point();
p.username = 'zhangsan';
console.log(p.username); //zhangsan
上面代碼中,Point類定義以後,給對象 p 又添加了一個username屬性。這是徹底能夠的。 跟單網www.gendan.com可是要注意:此種方式,僅僅是給對象p添加一個屬性,而不是給類添加一個屬性。 或者說: 此種方式,僅僅是給對象p的this添加一個屬性,而不是給類添加一個屬性。
class Point {html
constructor() { }}let p1 = new Point();
p1.username = 'zhangsan';
console.log(p1.username); //zhangsan
let p2 = new Point();
console.log(p2.username); //undefined
上面例子中,只給對象p1添加了username屬性,但沒有給類添加屬性。 因此,p2對象中並無username屬性。
屬性與方法添加到類上
class Point {java
constructor() { }}
Point.prototype.username = 'zhangsan';
let p1 = new Point();
console.log(p1.username); //zhangsan
let p2 = new Point();
console.log(p2.username); //zhangsan
上面代碼中,使用 Point.prototype方式,給類添加屬性。 這樣,類的全部對象(p一、p2)就都有username屬性了。
在javascript中,每個類都有一個prototype,它就是類的原型,類的全部實例共享一個原型。若是想訪問這個原型,能夠使用proto指針。
樣例代碼:
<!DOCTYPE html><html>this
<head> <meta charset="utf-8"> <title></title> </head> <body> <script> class Point { constructor() { } } let p = new Point(); console.log(p.__proto__); //注意proto指針的寫法 /** * 輸出結果: * {constructor: ƒ} * constructor: class Point //這裏證實:proto指針指向類的原型 * __proto__: Object */ let p1 = new Point(); let p2 = new Point(); //這裏證實:類的全部實例共享一個原型 console.log(p1.__proto__===p2.__proto__); //true </script> </body></html>