ES5和ES6类与继承的区别联系

标题ECMAScript 的原生构造函数大致有下面这些:

  1. List item
  2. Boolean()
  3. Number()
  4. String()
  5. Array()
  6. Date()
  7. Function()
  8. RegExp()
  9. Error()
  10. Object()

ES5中无法继承原生构造函数

原生构造函数会忽略apply方法传入的this,也就是说,原生构造函数的this无法绑定,导致拿不到内部属性。ES5 是先新建子类的实例对象this,再将父类的属性添加到子类上,由于父类的内部属性无法获取,导致无法继承原生的构造函数。

ES6可以

因为 ES6 是先新建父类的实例对象this,然后再用子类的构造函数修饰this,使得父类的所有行为都可以继承。
例外
ES6 改变了Object构造函数的行为,一旦发现Object方法不是通过new Object()这种形式调用,ES6 规定Object构造函数会忽略参数。

class Obj extends Object{
  constructor(){
    super(...arguments)
  }
}
var o = new Obj({attr:true});
console.log(o.attr); //输出 undefined
上一篇:ES5面向对象基础结构


下一篇:es5-Array