js的类?其实还是原型!

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 }

基本点

1. class是关键字,class Point定义了一个“类”。其它变量名不能与类名相同

2. Point的类型(typeof):function,必须通过new来调用

  • class的pototype=>包含在class中所有定义的方法(包括constructor)
    Point.protoype;//{constructor: ƒ, toString: ƒ}

3. 与函数一样,类也可以使用表达式的形式定义 

  • var MyPoint = class{};
    var mypoint= new Mypoint();

    不会变量提升:必须先定义才可以使用class

  • name属性(就像函数名),同样的,class后的名称只能在类内部使用
    MyPoint.name;//MyPoint
    var MyPoint2 = class me{};
    MyPoint2.name;//MyPoint2
    mypoint = new me();//报错,me未定义,只能在类内部使用

4. constructor是构造函数

  • 通过new Point来实例化一个对象,且会自动调用class中的contructor
  • 返回值:默认返回实例对象this,可指定其它返回值(与es5相同)
  • 可省略?如果不显式写一个constructor,会自动添加一个空的(与C++相同)
  • Point.prototype.contructor是class,而不是contructor函数
  • var point = new Point();
    console.log(point.constructor===Point);//true

    constructor中的this指向实例化后的对象,与es5中的相同 

    console.log(point);//Point {x: undefined, y: undefined}

5. 对象属性的定义:在constructor中用this来添加; 对象方法的定义:在class中直接定义(不加function和逗号)

6. 在class中定义的方法不可枚举

1 Object.keys(Point.prototype);//结果为空,说明不可枚举
2 //es5中可枚举
3 function Test(){}
4 Test.prototype.fun1 = function(){};
5 Object.keys(Test.prototype);//[fun1]可枚举
View Code

相关文章:

  • 2021-11-27
  • 2021-09-02
  • 2021-04-09
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-06-11
  • 2021-04-24
  • 2021-10-27
  • 2022-12-23
相关资源
相似解决方案