对象使用类定义属性

时间:2017-09-10 12:50:53

标签: javascript

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

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

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

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

当我使用getName方法静态时 output - Object {writable:true,enumerable:false,configurable:true}

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

仅在第二种情况下,getName设置为ownProperty的{​​{1}}。在第一种情况下,abc上提供了getName

答案 1 :(得分:1)

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

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

如您所知,类语法只是语法上的shugar:

function abc(){
  //the constructor goes here
}

abc.someStatic = 1;

abc.prototype = {
  getName(){
    //...
  }
};