Javascript 如何判断ES6类是否具有给定名称的getter?
ES6类似乎不响应.hasOwnProperty,正如人们所期望的那样 如果你有这门课: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中有点奇怪,因为它基
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