我想知道HTML元素的textContent属性是否是一种吸气剂,它正在递归地搜索节点以找到文本节点。
我做了一个实验:
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的结果相同。
这使我提出了一个问题。有什么方法可以确定某个属性是否是访问者?
答案 0 :(得分:3)
是的。 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))