我想知道 HTML 元素的 textContent 属性是否是一个通过节点递归搜索以查找文本节点的 getter。
我做了一个实验:
Object.defineProperty(HTMLElement.prototype, 'textContentMyOwnImplementation', {
get() {
const result = [];
function search(node) {
if(node.nodeName == '#text')
result.push(node.data);
else
for(let i = 0; i < node.childNodes.length; i++) {
search(node.childNodes[i]);
}
}
search(this);
return result.join(' ');
}
})
结果与 textContent 的相同。
这让我想到了一个问题。有什么方法可以确定属性是否是访问器?
最佳答案
是的。 Object.getOwnPropertyDescriptor
方法与 defineProperty
相反:
const obj = {
property: 'value',
get accessor(){ return 'value' },
set accessor(value){}
}
console.log(Object.getOwnPropertyDescriptor(object, 'property'))
/*
{
enumerable: true,
writable: true,
configurable: true,
value: "value"
}
*/
console.log(Object.getOwnPropertyDescriptor(object, 'accessor'))
/*
{
enumerable: true,
writable: true,
configurable: true,
get: function(...){...},
set: function(...){...}
}
*/
使用它,您可以实现一个函数,为您确定:
const isAccessor = (object, property) => !('value' in Object.getOwnPropertyDescriptor(object, property))
关于javascript - 如何检查对象的属性是 getter 还是 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58311323/