【发布时间】:2021-12-17 10:08:33
【问题描述】:
可以使用以下方法为document.querySelector 创建速记
const $ = document.querySelector.bind(document);
const $$ = document.querySelectorAll.bind(document);
所以现在let a = $('a') 和let a = document.querySelector('a') 是等价的。
有没有办法为querySelector 方法本身创建简写?
IE。使let a = element.shortHand(args) 和let a = element.querySelector(args) 等同于任何(预先未知)element。
编辑:由于人们说这样做是个坏主意,所以还有另一个问题:如何制作$ $$ 选择器,就像Chrome DevTools 中的选择器一样,它接受根元素作为第二个参数?
IE。使let a = $('a',element) 和let a = element.querySelector('a') 等价。
【问题讨论】:
-
当然:在
Element.prototype.querySelector旁边创建一个方法。绝对不推荐。 -
顺便提一下,有些控制台已经有Web Console Helpers,比如
$和$$,它们接受两个参数:选择器和根元素。 -
您可以通过
const $ = (selector, root = document) => root.querySelector(selector);创建自己的$。很简单。 -
questions 有两个建议。我不知道为什么
.bind方法更受欢迎,但在大多数情况下,它们的工作方式应该相同。我相信,如果document被重新定义,那么.bind方法仍然可以工作,而箭头函数将从新的document对象中读取querySelector,它可能没有该方法;箭头函数也需要每次都解析document,但这是一个很小的优化......并且重新定义document(在全局范围内)只能在ES6模块中进行,无论如何都不应该“随机”发生。跨度>
标签: javascript metaprogramming