首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是在类中定义的GET或SET

是在类中定义的GET或SET
EN

Stack Overflow用户
提问于 2019-01-01 21:42:34
回答 1查看 47关注 0票数 2

我试图找出当前派生类是否有属性设置器。原因是我通过扩展类的构造函数循环了几个选项。只想分配这些属性,这些属性是这个类的一部分,而不是基类。

所以我需要找出一个可能性,如果这个类是否存在getter或setter。我删除尽可能多的代码,以显示问题的情况。

这是基类:

代码语言:javascript
运行
复制
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;
    }
}

下面是派生类:

代码语言:javascript
运行
复制
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;
    }
}

以及如何初始化对象:

代码语言:javascript
运行
复制
let options = {otherProperty: "new Text"};
let object = new derivatedClass(options);
console.log(options);

关于已经尝试过的解决办法:

  • getOwnPropertyDescriptor总是返回undefined;按照分配的方式返回options
  • hasOwnProperty总是返回false;按照分配的方式返回options
  • typeof this[prop] != "undefined"调用getter,这可能非常糟糕,因为html尚未定义。html.innerText参考误差
  • 不是解决方案,而是为了验证:删除派生类中的if子句,将正文文本更改为new Text,并在控制台中打印一个空对象。

在Chrome 71中测试。

会有一些避免这种情况的办法:

  • 将该类处理的所有属性转移到另一个对象(很难看,很有可能忘记列表中的属性)
  • 请始终使用Object.defineProperty,因为它们将在super调用之后执行。但是,它没有类构造的get/set函数那么漂亮。

是否有可能查明是否有一个在otherProperty中可用的setter在derivatedClass中计算为true,而在baseClass中没有?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-01 22:18:40

试试这个

代码语言:javascript
运行
复制
const descriptor = Object.getOwnPropertyDescriptor(derivatedClass.prototype, 'otherProperty');
console.log(descriptor);

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

这里有更多的信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53999173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档