Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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 如何判断ES6类是否具有给定名称的getter?_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 如何判断ES6类是否具有给定名称的getter?

Javascript 如何判断ES6类是否具有给定名称的getter?,javascript,ecmascript-6,Javascript,Ecmascript 6,ES6类似乎不响应.hasOwnProperty,正如人们所期望的那样 如果你有这门课: class Foo { get index() { return 12; } } 此代码将返回false: let myFoo = new Foo(); alert(myFoo.hasOwnProperty("index"); <-- alerts "false" 测试ES6类上是否存在“getter”或“setter”的正确方法是什么?类在JavaScript中有点奇怪,因为它基

ES6类似乎不响应.hasOwnProperty,正如人们所期望的那样

如果你有这门课:

class Foo {
  get index() {
    return 12;
  }
}
此代码将返回false:

let myFoo = new Foo();
alert(myFoo.hasOwnProperty("index"); <-- alerts "false"

测试ES6类上是否存在“getter”或“setter”的正确方法是什么?

类在JavaScript中有点奇怪,因为它基本上只是原型继承。因此,在这种情况下,
index
应该存在于
myFoo
的原型上:

class-Foo{
获取索引(){
返回12;
}
}
const myFoo=新Foo();
myFoo.hasOwnProperty('index');//假的
Object.getPrototypeOf(myFoo.hasOwnProperty('index');//真的
作为@zero298链接

Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), 'index').get

这回答了你的问题吗?另请参阅不要在Javascript中使用类,这样您就不会有这个问题:)好的,感谢第一个类似乎没有完全做到这一点,但MDN页面建议:Object.getOwnPropertyDescriptor(Object.getPrototypeOf(myFoo),'index');这是一个很好的方法,但至少是有效的。是的,如果我也使用ruby,我想我不会有这个问题。测试setter是否存在?有一些函数专门用于查找getter/setter,例如
myFoo.\uu lookupSetter.\uuu('index')
,但它们已经被弃用了。我相信您最好使用
Object.getOwnPropertyDescriptor
来区分getter和setter。谢谢。值得注意的是,对于未来的读者,您上面描述的对类实例有效的方法对于PlanJavaScript对象无效。所以如果你想要一个像
Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), 'index').get