¿Puedo hacer que las funciones integradas devuelvan propiedades adicionales?
Por ejemplo, si llamo a querySelectorAll, ¿puedo hacer que el valor devuelto contenga una propiedad deseada (el último elemento)?
En vez de:
var elements = document.querySelectorAll('span'); var last = elements[elements.length - 1];Quiero hacer:
document.querySelectorAll('span').lastElementPuede, aunque no lo recomendaría: la mutación de objetos incorporados es propensa a causar problemas.
querySelectorAll devuelve una NodeList, por lo que puede cambiar 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>Un mejor enfoque sería crear y usar su propia función que tenga la propiedad agregada al objeto devuelto.
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>