我可以让内置函数返回其他属性吗?

例如,如果我调用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>

Javascript相关问答推荐

如何在不使用类型化数组的情况下将32位浮点数按位转换为整值?

一次仅播放一个音频

使用useup时,React-Redux无法找到Redux上下文值

react—router v6:路由没有路径

仅针对RTK查询中的未经授权的错误取消maxRetries

用JavaScript复制C#CRC 32生成器

更改JSON中使用AJAX返回的图像的路径

如何在模块层面提供服务?

如何在每次单击按钮时重新加载HighChart/设置HighChart动画?

对路由DOM嵌套路由作出react

与svg相反;S getPointAtLength(D)-我想要getLengthAtPoint(x,y)

如何访问此数组中的值?

打字脚本中方括号符号属性访问和拾取实用程序的区别

我想使用GAS和HTML将从Electron 表格中获得的信息插入到文本字段的初始值中

为什么延迟在我的laravel项目中不起作用?

背景动画让网站摇摇欲坠

P5.js中的分形树

如何在TransformControls模式下只保留箭头进行翻译?

更新文本区域行号

REACT-本机错误:错误类型错误:无法读取未定义的容器的属性