Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象使用类定义属性_Javascript - Fatal编程技术网

Javascript 对象使用类定义属性

Javascript 对象使用类定义属性,javascript,Javascript,在这里,我将尝试使用object.getOwnPropertyDescriptor探索更多关于对象属性的信息。但是当我使用非静态方法时,我没有得到任何响应。我不知道这背后的原因是什么 当我使用非静态的getName方法时 输出-未定义 class abc { getName() { return 'abc class name' } } console.log(Object.getOwnPropertyDescriptor(abc, 'getName')) 当我使用get

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

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

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

console.log(Object.getOwnPropertyDescriptor(abc, 'getName'))
当我使用getName方法static时 输出-对象{可写:真,可枚举:假,可配置:真}

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

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

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

Object.getOwnPropertyDescriptor(abc.prototype, 'getName')
正如您所知,类语法只是语法糖:

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

abc.someStatic = 1;

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

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

Object.getOwnPropertyDescriptor(abc.prototype, 'getName')
正如您所知,类语法只是语法糖:

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

abc.someStatic = 1;

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

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

let a = new abc();
a.getName() //'abc class name'
在第二个场景中,使用
static
关键字创建类方法:

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

只有在第二种情况下,
getName
设置为
abc
ownProperty
。在第一个场景中,
getName
原型上可用,这是因为在第一个场景中,
getName()
是类型为
abc
的对象方法的实例:

let a = new abc();
a.getName() //'abc class name'
在第二个场景中,使用
static
关键字创建类方法:

abc.getName() //'abc class name'
只有在第二种情况下,
getName
设置为
abc
ownProperty
。在第一个场景中,
getName
原型上可用