逆向工程基类定义

时间:2018-04-20 19:17:51

标签: javascript node.js ecmascript-6

在我正在解决的一个难题中,有一个任务来确定下面的类的基类

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;

我不需要准备好解决,我需要解释如何才能获得基类定义。

2 个答案:

答案 0 :(得分:0)

可能是这样的:

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的次数而不是传递给它的参数。

答案 1 :(得分:0)

您需要的只是Object.getPrototypeOf,例如

Object.getPrototypeOf(MyClass) === BaseClass

ES6类语法将结果构造函数的[[Prototype]]设置为父类。