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属性

 

posted @ 2019-11-24 11:32  jeff_zhu  阅读(1071)  评论(0编辑  收藏  举报