【问题标题】:Object define property with class对象用类定义属性
【发布时间】:2017-09-10 12:50:52
【问题描述】:

在这里,我尝试使用 Object.getOwnPropertyDescriptor 探索有关对象属性的更多信息。但是当我使用非静态方法时,我没有得到任何回应。我不知道这背后的原因是什么。

当我使用非静态的 getName 方法时 输出 - 未定义

class abc {
    getName() {
    return 'abc class name'
  }
}

console.log(Object.getOwnPropertyDescriptor(abc, 'getName'))

当我使用静态 getName 方法时 输出 - 对象 {可写:真,可枚举:假,可配置:真}

class abc {
    static getName() {
    return 'abc class name'
  }
}

console.log(Object.getOwnPropertyDescriptor(abc, 'getName'))

【问题讨论】:

    标签: javascript


    【解决方案1】:

    这是因为在您的第一个场景中,getName()abc 类型的对象方法的实例:

    let a = new abc();
    a.getName() //'abc class name'
    

    在第二种情况下,使用 static 关键字创建一个类方法:

    abc.getName() //'abc class name'
    

    仅在第二种情况下,getName 设置为 ownPropertyabc。在第一种情况下,getNameprototype 上可用。

    【讨论】:

      【解决方案2】:

      因为非静态方法是原型的一部分:

      Object.getOwnPropertyDescriptor(abc.prototype, 'getName')
      

      如您所知,类语法只是以下的语法糖:

      function abc(){
        //the constructor goes here
      }
      
      abc.someStatic = 1;
      
      abc.prototype = {
        getName(){
          //...
        }
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-26
        • 2020-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多