1
使用ES6類製作一個簡單的ORM,我使用阻塞問題運行 - 我無法正確複製一個類(就像我在ES5中使用util.extend
)。如何克隆ES6類對象構造函數?
具體而言,這裏是我的嘗試:
class BaseModel {
echo() {
console.log(this.props);
}
static _setProperties(props) {
this.props = props;
}
}
function makeModel(props) {
// Try to copy the Class object
const Model =
Object.assign(Object.create(Object.getPrototypeOf(BaseModel)), BaseModel);
// Copy my static methods – is there a better way to do this?
Object.getOwnPropertyNames(BaseModel).forEach((key) => {
if (!key.startsWith('_')) return;
Model[key] = BaseModel[key];
});
// Configure the new model
Model._setProperties(props);
return Model;
}
const GreeterModel = makeModel('hello');
const greeter = new GreeterModel();
greeter.echo(); // Should log hello
我得到的錯誤是:
TypeError: GreeterModel is not a constructor
有沒有辦法用ES6類來實現這一點,或者我要堅持ES5風格?
可選問題:有沒有更好的方法來複制靜態方法? getOwnPropertyNames
的解決方案並不理想,因爲它還返回只讀屬性,如length
。
謝謝!
'Object.create'不會創建函數,這段代碼也不能用於ES5。 – Bergi
爲什麼不使用ES6'class extends'? – Bergi