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

Pan*_*gic 2 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
Run Code Online (Sandbox Code Playgroud)

sam*_*ime 6

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

不要扩展Object,只需创建没有超类的对象(因为它无论如何都是一个 Object )并使用Object.assign(this, obj)将所有属性分配给新创建的对象。

class Sub {
  constructor(obj) {
    Object.assign(this, obj);
  }
}

console.log(new Object({a: 1}));
console.log(new Sub({a: 1}));
Run Code Online (Sandbox Code Playgroud)