调用扩展Object的JavaScript ES6类的构造函数中的super()

时间:2017-07-13 17:23:50

标签: javascript es6-class

在下面我试图创建一个Object的子类,其行为类似于Object在创建实例时使用'new'。我当然会向我的子类添加更多方法,但下面显示了我在构造函数中调用超构造函数的问题。

为什么我的类Sub的实例没有像普通对象那样的字段'x'在使用相同参数的'new'时以相同的方式创建?

class Sub extends Object
{ constructor (anObject)
  { super(anObject);
  }
}
var ob  = new Object ({x: 123} );
var sub = new Sub    ({x: 123} );
console.log( ob.x ); // -> 123
console.log( sub.x); // -> undefined

1 个答案:

答案 0 :(得分:4)

基本上,因为Object是特殊的并且遵循不同的规则,因为它几乎是JavaScript中最基础的构造。

不是扩展Object.assign(this, obj),而是创建它没有超类(因为它无论如何都是一个对象),并使用class Sub { constructor(obj) { Object.assign(this, obj); } } console.log(new Object({a: 1})); console.log(new Sub({a: 1}));将所有属性分配给新创建的对象。

?- [] = _.

相关问题