繁体   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