[英]How to bypass constructor call when creating a new class instance
我想在不調用其構造函數的情況下創建 class 的實例。
例如,
class Test {
private greeting: string = "Hello";
constructor() {
console.log("this should not happen");
}
foo() {
console.log(this.greeting + " world!");
}
}
magic({greeting: "Hey"}, Test) instanceof Test // true
對於某些上下文,我正在處理 ORM。我需要它來創建 JavaScript 個對象,同時繞過構造函數。 這是在不需要工廠或無參數構造函數的情況下創建普通舊對象所必需的。
您正在尋找的“ magic
”可能是Object.create
function:
let t = Object.create(Test.prototype, {
greeting: {
value: "Hey",
writable: true
},
});
順便說一句,正如評論中所指出的,我認為您不應該跳過構造函數。 如果您真的需要,至少告訴我們您遇到的真正問題。
Object.setPrototypeOf 將完成大部分工作。
const rawObject = {greeting: 'Hey'};
const testInstance = Object.setPrototypeOf(rawObject, Test.prototype);
但是,請注意,此方法將覆蓋任何 getter/setter 方法。 使用它來提供基礎值。
例如,
class Test {
_greeting;
get greeting() {
return this._greeting;
}
}
const a = Object.setPrototypeOf({greeting: 'Hey'}, Test.prototype);
console.log(a.greeting); // Hey
a._greeting = 'Hello';
console.log(a.greeting); // Hey
const b = Object.setPrototypeOf({_greeting: 'Hey'}, Test.prototype);
console.log(b.greeting); // Hey
b._greeting = 'Hello';
console.log(b.greeting); // Hello
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.