在构造函数中保存扩展类'方法'的名称

时间:2017-08-16 20:12:27

标签: javascript ecmascript-6 es6-class

我有三个班,其中两个扩展第三班。有可能以某种方式(不同于手动)将扩展类的名称分配给超级构造函数吗?

class Master {

    constructor(options) {
        this.methods = Object.getOwnPropertyNames( Master.prototype );
    }

    getMethods() {
        return Object.getOwnPropertyNames( Master.prototype );
    }

}

class SlaveOne extends Master {
    constructor(options) {
        super(options);
    }
    methodOne() {}
    methodTwo() {}
}

class SlaveTwo extends Master {
    constructor(options) {
        super(options);
    }
    methodThree() {}
    methodFour() {}
}

所以,我想要的是在Master类中使用方法或this.methods赋值,这将:

  • ['constructor', 'methodOne', 'methodTwo'];
  • 的实例上调用时返回SlaveOne
  • ['constructor', 'methodThree', 'methodFour'];
  • 的实例上调用时返回SlaveTwo

['constructor', 'getMethods']SlaveOneSlaveTwo的实例上调用时,我当前的代码将返回相同的Master。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这样的事情可以解决问题



class Master {

    getMethods() {
        return Object.getOwnPropertyNames( this.constructor.prototype );
    }

}

class SlaveOne extends Master {
    constructor(options) {
        super(options);
    }
    methodOne() {}
    methodTwo() {}
}

class SlaveTwo extends Master {
    constructor(options) {
        super(options);
    }
    methodThree() {}
    methodFour() {}
}

console.log(new SlaveOne().getMethods(), new SlaveTwo().getMethods())