美文网首页
33.3、class与对象

33.3、class与对象

作者: 一土二月鸟 | 来源:发表于2020-08-03 22:48 被阅读0次

    class

    • class是function函数的语法糖,class里的constructor相当构造函数,constructor外定义的方法相当于构造函数的原型上的方法。
    • class存在暂时性死区,在class前new class将会报错。
    • constructor直接定义的属性,属于实例化的私有属性,不存在于class的原型上。
    • 私有化方法的实现方式
    const pmd = Symbol(); // 之所以用Symbol是因为其他模块引用class时,无法获取或修改方法名为Symbol()的方法,因为它是唯一的。
    class Test {
      [pmd] () {
        console.log(111);
      }
      say () {
        this[pmd]();
      }
    }
    let t = new Test();
    t.say(); // 1111
    t.pmd(); // error
    
    • 静态方法兼容性较好。静态属性需要较高的浏览器版本。
    • 静态属性和方法无法通过实例化对象进行方法,只能通过类直接调用。
    • class 默认为严格模式
    class t {
        a () {
          b = 1;
          // let b = 1; // 使用let或者var可以正常运行
        }
    }
    new t().a(); // VM2561:3 Uncaught ReferenceError: b is not defined
    
    • this指向
      • 如果将实例里的方法赋值给新的变量,单独调用,里面的this将会变成undefined,因为class内部默认的严格模式,严格模式下函数里的this指向undefined
      • 解决办法,将类的内部方法改为箭头函数,或者在构造器中将内部方法进行绑定指向当前this。

    extends

    • extends为继承类的关键字,继承了某个类后,子类的实例可以获取到父类的所有属性和方法
    • 子类的构造器中必须执行super方法,代表运行一遍父类的构造器,并将父类的私有属性进行继承。super方法必须写到子类构造器的顶部。

    相关文章

      网友评论

          本文标题:33.3、class与对象

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