我可以让内置函数返回其他属性吗?
例如,如果我调用querySelectorAll,我能否以某种方式使返回值包含所需的属性(最后一个元素)?
而不是:
var elements = document.querySelectorAll('span');
var last = elements[elements.length - 1];
我想做:
document.querySelectorAll('span').lastElement
我可以让内置函数返回其他属性吗?
例如,如果我调用querySelectorAll,我能否以某种方式使返回值包含所需的属性(最后一个元素)?
而不是:
var elements = document.querySelectorAll('span');
var last = elements[elements.length - 1];
我想做:
document.querySelectorAll('span').lastElement
你可以,尽管我不建议这样做——改变内置对象容易导致问题.
querySelectorAll
返回 node 列表,因此可以更改NodeList.prototype
.
Object.defineProperty(
NodeList.prototype,
'lastElement',
{ get: function() {
return this[this.length - 1];
}}
);
console.log(document.querySelectorAll('span').lastElement.textContent);
<span>1</span>
<span>2</span>
更好的方法是创建并使用自己的函数,将属性添加到返回的对象中.
const mySelectorAll = (selector) => {
const list = document.querySelectorAll(selector);
return Object.assign(list, { lastElement: list[list.length - 1] });
};
console.log(mySelectorAll('span').lastElement.textContent);
<span>1</span>
<span>2</span>