在下面我试图创建一个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
答案 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}));
将所有属性分配给新创建的对象。
?- [] = _.