美文网首页
ES6 - Class

ES6 - Class

作者: 恒星的背影 | 来源:发表于2019-01-24 09:46 被阅读0次

    介绍

    Class 提供一种更接近其它面向对象语言的写法。

    定义一个 Class:

    class Point {
      constructor(x, y) {
        this.x = x;
        this.y = y;
      }
    
      toString() {
        return '(' + this.x + ', ' + this.y + ')';
      }
    }
    

    生成对象:

    const p = new Point(1, 2)
    

    未使用 static 声明的属性挂在构造函数的 prototype 上。

    重要性质:

    typeof Point    "function"
    Point === Point.prototype.constructor    true
    new Point()
    

    这些性质表明 class 就是构造函数。

    类必须使用new调用,否则会报错。这是它跟普通构造函数的一个主要区别。

    class 表达式:

    const MyClass = class Me {
      getClassName() {
        return Me.name;
      }
    };
    

    这个类的名字是 MyClass 而不是 Me,Me只在 Class 的内部代码可用,指代当前类。

    类不存在变量提升:

    new Foo();    // ReferenceError
    class Foo {}
    

    通过 new 调用一个函数时,如果函数中 return 非对象类型,则 return 不起作用;如果 return 对象类型,则返回值即是这个对象,这个对象不是构造函数的实例。

    在 class 的内部可以使用 get 和 set 关键字,对某个属性设置存值函数和取值函数,拦截该属性的存取行为:

    class MyClass {
      constructor() { }
      get prop() {
        return 'getter';
      }
      set prop(value) {
        console.log('setter: '+value);
      }
    }
    

    静态方法

    静态方法对应直接挂在构造函数对象上的方法。

    代码示例:

    class Foo {
      static classMethod() {
        return 'hello';
      }
    }
    

    静态方法中的 this 指向构造函数。
    父类的静态方法可以被子类继承。
    子类中的 super 指向父类。

    实例属性的新写法

    实例属性除了定义在 constructor() 方法里面的 this 上面,也可以定义在类的最顶层。(此语法暂不支持)

    class IncreasingCounter {
      _count = 0;
    }
    

    静态属性

    ES6 规定,Class 内部只有静态方法,没有静态属性。

    静态属性只能这么写:

    class Foo { }
    Foo.prop = 1;
    

    私有方法和私有属性

    暂略

    相关文章

      网友评论

          本文标题:ES6 - Class

          本文链接:https://www.haomeiwen.com/subject/lwtxlqtx.html