我在这里尝试使用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'))
答案 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(){
//...
}
};