ES5/ES6 的继承除了写法以外还有什么区别?

主要是继承的区别       

class Super {}

class Sub extends Super {};

const sub = new Sub();

sub.__proto__ === Super;     

 子类可以直接通过 __proto__ 寻址到父类。

function Subper(){};

function Sub(){};

Sub.prototype = new Super();

Sub.prototype.constructor = Sub;

var sub = new Sub;

Sub.__proto__ ===Function.prototype

而通过 ES5 的方式,Sub.__proto__ === Function.prototype

其他的区别

1.class 声明会提升,但不会初始化赋值。Foo 进入暂时性死区,类似于 let、const 声明变量。

const bar = new Bar(); // it's ok

function Bar() { this.bar = 42; }

const foo = new Foo(); // ReferenceError: Foo is not defined

class Foo { constructor() { this.foo = 42; } }

2.class 声明内部会启用严格模式。

// 引用一个未声明的变量

function Bar() { baz = 42; // it's ok }

const bar = new Bar();

class Foo {

    constructor() {

        fol = 42; // ReferenceError: fol is not defined

    }

}

const foo = new Foo();

3.class 的所有方法(包括静态方法和实例方法)都是不可枚举的。


4.class 的所有方法(包括静态方法和实例方法)都没有原型对象 prototype,所以也没有[[construct]],不能使用 new 来调用。


5.必须使用 new 调用 class。


6.class 内部无法重写类名。


你可能感兴趣的:(ES5/ES6 的继承除了写法以外还有什么区别?)