class與class的繼承


 1 class Point{
 2   constructor(x,y){
 3     this.x = x;
 4     this.y = y;
 5   }
 6   toString(){
 7     return '(' + this.x + ',' + this.y + ')';
 8   }
 9 }
10 var foo = new Point(2,3);
11 console.log(foo.x);
12 // es6類完全可以看作構造函數的另一種寫法
13 // type of "function"
14 // Point === Point.prototype.constructor    true
15 
16 // 構造函數的prototype屬性在es6的"類"上繼續存在,事實上類的所有方法都定義在類的 prototoye 屬性上
17 
18 // 在類的實例上調用方法,其實就是調用類原型上的方法
19 
20 // 類的內部定義的所有方法都是不可枚舉的
21 
22 // 類和模塊的內部默認使用嚴格模式
23 
24 // constructor是類的默認方法通過new命令生成實例對象時自動調用該方法.
25 
26 // 一個類必須有constructor方法,如果沒有顯式定義,默認添加一個空的constructor方法
27 
28 // 類必須使用new來調用,否則報錯
29 
30 // 與es5一樣實例的屬性除非顯式定義在其本身(即this對象上),否則都是定義在原型(即class)上
31 
32 // class表達式
33 
34 const myClass = class Me{}
35 
36 const foo = class{};    // 省略類名
37 
38 // 類不存在變量提升 (與繼承有關)
39 
40 // 必須在定義后使用,否則報錯
41 
42 
43 // this指向
44 
45 // 類的方法內部如果含有this,它將默認指向類的實例
46 
47 // class的取值函數getter和存值函數setter
48 
49 // class的靜態方法
50 // 在一個方法前加上static關鍵字就表示該方法不會被實例繼承,而是直接通過類調用,稱為靜態方法
51 // 父類的靜態方法可以被子類繼承,靜態方法也可以從super對象上調用
52 
53 // class 實例屬性/靜態屬性
54 // 在實例屬性寫法前面加上static關鍵字就可以了
55 
56 // class的繼承
57 
58 // class通過extends實現繼承
59 // super關鍵字表示父類的構造函數
60 // 子類必須在constructor方法中調用super方法,否則新建實例會報錯,這是因為子類沒有自己的this對象,而是繼承父類的this對象
61 class point {}
62   class colorPoint{
63     constructor() {
64       super();    // 調用父類constructor方法
65     }
66   }
67 
68 // 在子類的構造函數中只有調用super之后才可以使用this關鍵字,否則報錯
69 
70 // super關鍵字
71 // super關鍵字及可以當作函數使用,也可以當作對象使用
72 // super作為函數使用時,代表調用父類的構造函數,只能在子類構造函數中使用,其他地方會報錯
73 // 第二種情況,super作為對象時在普通方法中指向父類的原型對象,在靜態方法中指向父類
74 // super調用父類的方法時,super會綁定子類的this 
75 
76 
77 // 類的prototype屬性和__proto__屬性
78 // class作為構造函數的語法糖同時有prototype屬性和__proto__屬性,因此同時存在兩條繼承鏈
79 // 子類的__proto__屬性表示構造函數的繼承,總是指向父類
80 // 子類的prototype屬性的__proto__屬性表示方法繼承,總是指向父類prototype屬性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM