Sle*_*v7n 3 javascript getter properties object accessor
我想知道 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(' ');
}
})Run Code Online (Sandbox Code Playgroud)
结果与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(...){...}
}
*/
Run Code Online (Sandbox Code Playgroud)
使用它,您可以实现一个函数,为您确定:
const isAccessor = (object, property) => !('value' in Object.getOwnPropertyDescriptor(object, property))
Run Code Online (Sandbox Code Playgroud)