簡體   English   中英

逆向工程基類定義

[英]Reverse engineering base class definition

在我要解決的難題中,有一個任務是確定以下類的基類

class MyClass extends BaseClass {
    result(a, b) {
        this.a = a;
        this.b = b;
        return 100 - this.a + this.b;
    }
}
let m = new MyClass();
m.result(10, 20) === 90;
m.result(20, 10) === 110;

我不需要立即解決,我需要一個解釋如何獲得可能的基類定義。

可能是這樣的:

class BaseClass {
  set a(v) { this._a = 30-v }
  get a( ) { return this._a }

  set b(v) { this._b = 30-v }
  get b( ) { return this._b }
}

或這個:

class BaseClass {
  set a(v) { this._b = v }
  get a( ) { return this._a }

  set b(v) { this._a = v }
  get b( ) { return this._b }
}

有無數種方法可以實現此目的:

 class BaseClass { constructor ( ) { this.i = -1; } set a(v) { this.i++; } get a( ) { return (2-this.i)*10 } set b(v) { } get b( ) { return (this.i+1)*10 } } class MyClass extends BaseClass { result(a, b) { this.a = a; this.b = b; return 100 - this.a + this.b; } } let m = new MyClass(); console.log( m.result(10, 20) === 90 ); console.log( m.result(20, 10) === 110 ); 

再舉一個例子和預期的輸出可以大大縮小解決方案的范圍。 當提供其他數字時,我給出的第一個示例和第二個示例的行為各不相同,第三個示例取決於result被調用的次數,而不是傳遞給它的參數。

您只需要Object.getPrototypeOf ,例如

Object.getPrototypeOf(MyClass) === BaseClass

ES6類語法將生成的構造函數的[[Prototype]]設置為父類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM