es6 class

1.Es6引入了Class 类这个概念,作为对象的模板,通过class 关键字,可以定义类。

2.类和模块的内部,默认就是严格模式,所以不需要使用use strict 指定运行模式。

3.constructor 方法就是类的默认方法,通过new 命令生成对象实例时,自动调动该

  方法,一个类必须有constructor 方法,如果没有显示定义,一个空的constructor

  方法会默认添加。

4.类的实例对象

  必须使用new ,像函数那样调用Class ,将会报错。

    例如:

      class Point {

      }

      // 报错

      var point = Point(2,3);

      // 正确

      var point = new Point(2,3)

5.Class表达式

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

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

  采用Class 表达式,可以写出立即执行的Class

    let person = new clas {
        constructor(name){
        this.name = name;
      }
    sayName() {
      console.log(this.name);
    }
  }('张三');
  person.sayName(); //张三

6.类不存在变量提升。

7.不提供私有方法和私有属性。

8.this 的指向

  类德丰放内部含有this,它默认指向类的实例。

9.class 的静态方法。在类中定义的方法,都会被实例继承,

  如果在一个方法前加上static 关键字,就表示该方法

  不会被实例继承,而是直接通过类来调用。

  class Foo {
    static classMethod() {
      return 'hello';
    }
  }
  Foo.classMethod() // 'hllo'
  var foo = new Foo();
  foo.classMethod(); // 报错

10.class 可以通过extends关键字实现继承。

    class Point {}
    class ColorPoint extends Point{}
    class ColorPoint extends Point {
      constructor(x,y.color){
        super(x,y); // 调用父类的 constructor(x,y)
        this.color = color;
    }
  toString() {
    return this.color + ' '+ super.toString(); // 调用父类的方法
    }
  }

  子类必须在constructor 方法中调用super 方法,否则新建实例时会报错,因为子类没

  有自己的 this 对象,而是继承父类的this 对象,而活对其进行加工,如果不调用

  super 方法,子类就的不到this 对象。

11.Object.getPrototypeOf()

  Object.getPrototypeOf(ColorPoint) == Point

  可以使用这个方法判断,一个类是否继承另一个类。

12.super 关键字

    super 这个关键字既可以当作函数使用,也可以当做对象使用。

    1.super 作为函数调用的时,代表父类的构造函数。子类的构造函数必须

    执行一次super函数。

      class A {}
      class B extends A {
        constructor() {
          super();
        }
      }

    2.super 作为对象时,在普通方法中,指向父类的原型对象,在

      静态方法中指向父类。

      class A {
      p() {
        return 2;
      }
    }
    class B extends A{
      constructor() {
        super();
        console.log(super.p()); // 2
      }
    }

13.类的prototype 属性和__proto__ 属性

    class 作为构造函数的语法糖,同时有prototype 属性和__proto__属性,因此

    存在两天继承连。

    1.子类的__proto__ 属性,表示构造函数的继承,总是指向父类。

    2.子类的prototype 属性的__proto__属性,表示该方法的继承,总是指向父类

      的protoype属性。

    class A {}
    class B extends A {}
      B.__proto__===A // true
      B.proptoype.__proto__ === A.prototype // true

14.extends 的继承目标

  extends 关键字后面可以跟很多类型的值。

15.实例的__proto__属性

  子类属性的__proto__属性的__proto__属性,指向父类实例的__proto__,也就是说

  子类原型的原型,是父类的原型。

  var p1 = new Point(2,3);
  var p2 = new ColorPoint(2,3,'red');
    p2.__proto__===p1.__proto // false
    p2.__protot__.__proto__===p1.__proto__ // true

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏个人分享

Scala语法笔记

JAVA中,举例你S是一个字符串,那么s(i)就是该字符串的第i个字符(s.charAt(i)).Scala中使用apply的方法

22220
来自专栏水击三千

浅谈JavaScript的面向对象程序设计(三)

  前面已经对JavaScript的面向对象程序设计作了简单的介绍,包括了对象的属性、对象的工厂模式、构造函数和原型等。通过介绍,这些创建对象的方法依然有不少优...

24150
来自专栏前端正义联盟

一道 js 闭包面试题的学习

最近看到一条有意思的闭包面试题,但是看到原文的解析,我自己觉得有点迷糊,所以自己重新做一下这条题目。

39740
来自专栏十月梦想

变量和常亮

在函数内,变量的使用需要声明常量的作用域globay变量名(全局作用)local(局部)static(静态)

8320
来自专栏Vamei实验室

Python补充01 序列的方法

在快速教程中,我们了解了最基本的序列(sequence)。回忆一下,序列包含有定值表(tuple)和表(list)。此外,字符串(string)是一种特殊的定值...

19480
来自专栏Vamei实验室

Java进阶04 RTTI

运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息。 ...

20970
来自专栏Java帮帮-微信公众号-技术文章全总结

String中的null,以及String s;等区别详解

1、判断一个引用类型数据是否null。 用==来判断。 2、释放内存,让一个非null的引用类型变量指向null。这样这个对象就不再被任何对象应用了。等待JVM...

37140
来自专栏猿人谷

const用法小结

常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。 概述 1. const有什么...

18970
来自专栏LanceToBigData

JavaSE(四)之接口、访问控制

上面我们学习了几个修饰符,在开发中经常会用的到,所以必须熟练的掌握。接下来我学习一下接口和访问控制。 一、接口 一系列方法的声明,是一些方法特征的集合,一个接口...

24670
来自专栏前端知识分享

第186天:js深入理解构造函数和原型对象

1.在典型的oop的语言中,如java,都存在类的概念,类就是对象的模板,对象就是类的实例。但在js中不存在类的概念,js不是基于类,而是通过构造函数(cons...

13020

扫码关注云+社区

领取腾讯云代金券