class 中是否定义了 GET 或 SET

Is GET or SET defined in class

我试着找出,如果当前导出的class有一个属性 setter。原因是我通过扩展 classes 的构造函数循环了几个选项。并且只想分配那些属性,它们是 class 的一部分,而不是基础 class。

所以我需要一个可能性来查明,对于这个 class 是否存在 getter 或 setter。我删除了尽可能多的代码以仅展示问题。

这是基础class:

class baseClass{
    constructor(wOptions){
        //do some stuff
        if(typeof wOptions == "object"){
            for(let prop in wOptions){
                // if(Object.getOwnPropertyDescriptor(this, prop) != undefined){
                // if(this.hasOwnProperty(prop) != undefined){ /* doesn't work either */
                if(typeof this[prop] != "undefined"){ /* calls the getter, if exists.  */
                    this[prop] = wOptions[prop];
                    delete wOptions[prop];
                } 
            }
        }       
    }
    get mainProperty(){
        return 42;
    }
    set mainProperty(newValue){
        return 42;
    }
}

这是派生的 class:

class derivatedClass extends baseClass{
    constructor(wOptions){
        super(wOptions)
        //do some other stuff 
        let html = document.body;
        Object.defineProperty(this, "html", {value: html, writable: false});

        if(typeof wOptions == "object"){
            for(let prop in wOptions){
                // if(Object.getOwnPropertyDescriptor(this, prop) != undefined){
                // if(this.hasOwnProperty(prop) != undefined){ /* doesn't work either */
                if(typeof this[prop] != "undefined"){ /* calls the getter, if exists.  */
                    this[prop] = wOptions[prop];
                    delete wOptions[prop];
                } 
            }
        }       
    }
    get otherProperty(){
        return html.innerText;
    }
    set otherProperty(newValue){
        return html.innerText = newValue;
    }
}

以及如何初始化对象:

let options = {otherProperty: "new Text"};
let object = new derivatedClass(options);
console.log(options);

关于已经尝试过的解决方案:

在 Chrome 71 中测试。

有一些选择可以避免这种情况:

是否有可能查明是否存在 otherProperty 可用的 setter,它在派生类中的计算结果为真,但在基类中的计算结果为真?

试试这个

const descriptor = Object.getOwnPropertyDescriptor(derivatedClass.prototype, 'otherProperty');
console.log(descriptor);

如果derivatedClass.prototype有一个otherProperty(否则returns undefined),它将return一个包含一些值的对象。在 returned 对象中,您应该看到 getset

More info here