如何从另一个函数(Javascript)返回“addEventListener()”
我试图使我的代码更短、更优化,并希望使它看起来更清晰 到目前为止,我做到了: 功能ida{ return document.getElementByIda; } 函数cla{ return document.getElementsByClassNamea; } 功能热重分析{ return document.getElementsByTagNamea; } 函数qsa{ returndocument.querySelectora; } 功能qaa{ return document.querySelectorAlla;如何从另一个函数(Javascript)返回“addEventListener()”,javascript,Javascript,我试图使我的代码更短、更优化,并希望使它看起来更清晰 到目前为止,我做到了: 功能ida{ return document.getElementByIda; } 函数cla{ return document.getElementsByClassNamea; } 功能热重分析{ return document.getElementsByTagNamea; } 函数qsa{ returndocument.querySelectora; } 功能qaa{ return document.queryS
} 只需传入元素/节点列表作为第一个参数,并将侦听器附加到它
function ev(el, e, call) {
return el.addEventListener(e, callback);
}
作为替代方案,但不是我推荐的,您可以添加ev作为新的节点原型功能:
函数选择器{
返回文档。查询选择器选择器选择器;
}
如果Node.prototype.ev{
Node.prototype.ev=函数e,cb{
返回此文件。添加文件列表,cb;
};
}
qs'按钮'。ev'点击',手柄点击;
让计数=0;
功能手柄{
console.logcount++;
}
Count+=1只需传入元素/节点列表作为第一个参数,并将侦听器附加到它
function ev(el, e, call) {
return el.addEventListener(e, callback);
}
作为替代方案,但不是我推荐的,您可以添加ev作为新的节点原型功能:
函数选择器{
返回文档。查询选择器选择器选择器;
}
如果Node.prototype.ev{
Node.prototype.ev=函数e,cb{
返回此文件。添加文件列表,cb;
};
}
qs'按钮'。ev'点击',手柄点击;
让计数=0;
功能手柄{
console.logcount++;
}
计数+=1ev方法中存在错误。应该是
const ev = document.addEventListener.bind(document);
因此,您可以将实际函数本身别名,而不是创建新的包装原始函数的函数
如果要使用这种方法,您应该对其他别名执行相同的操作
const qs = document.querySelector.bind(document);
const qa = document.querySelectorAll.bind(document);
我最后的建议是,根本不要使用这些方法。缩写的方法名会损害代码的可读性。就代码而言,可读性几乎总是胜过简洁性。ev方法中存在错误。应该是
const ev = document.addEventListener.bind(document);
因此,您可以将实际函数本身别名,而不是创建新的包装原始函数的函数
如果要使用这种方法,您应该对其他别名执行相同的操作
const qs = document.querySelector.bind(document);
const qa = document.querySelectorAll.bind(document);
我最后的建议是,根本不要使用这些方法。缩写的方法名会损害代码的可读性。就代码而言,可读性几乎总是胜过简洁性。如果您希望使用语法qsinit-scrap.evclick,someFunction,您需要将querySelector返回的对象包装到另一个具有ev函数的对象中
class jQueryLite {
constructor(el) {
this.el = el;
}
ev(e, callback) {
this.el.addEventListener(e, callback);
return this;
}
}
qs(a) {
return new jQueryLite(document.querySelector(a));
}
如果您想查找它,它被称为Fluent interface。如果您想使用语法qsinit-scrap.evclick,someFunction,您需要将querySelector返回的对象包装到另一个具有ev函数的对象中
class jQueryLite {
constructor(el) {
this.el = el;
}
ev(e, callback) {
this.el.addEventListener(e, callback);
return this;
}
}
qs(a) {
return new jQueryLite(document.querySelector(a));
}
如果你想查看它的话,它被称为“流畅界面”。我研究了前面的答案作为灵感,并对其进行了解读 果心 const$=选择器,base=文档=>{ 返回base.querySelectorselector; }; Node.prototype.on=函数类型,侦听器{ 返回this.addEventListenertype,listener; }; 它支持一个基本值,以防您有文档以外的其他元素,但它是可选的。 我喜欢$等等,这就是我使用的,就像jQuery一样。 像下面这样称呼它 $“按钮”。单击“按钮”,e=>{ console.loge.currentTarget; };
我把以前的答案看作是一种灵感,并创造了自己的想法 果心 const$=选择器,base=文档=>{ 返回base.querySelectorselector; }; Node.prototype.on=函数类型,侦听器{ 返回this.addEventListenertype,listener; }; 它支持一个基本值,以防您有文档以外的其他元素,但它是可选的。 我喜欢$等等,这就是我使用的,就像jQuery一样。 像下面这样称呼它 $“按钮”。单击“按钮”,e=>{ console.loge.currentTarget; };
但是我如何通过pselement将其绑定到已经获取的元素?请参见修改后的answer@NadeemAhmad。但是我如何通过pselement将其绑定到已经获取的元素?请参见修改后的answer@NadeemAhmad。如果您只是调用它们,所有这些速记都会抛出。和qa.calldocument。。。感觉有点笨重。。。用bind修复了。如果你打电话给他们,所有这些速记员都会被抛出。和qa.calldocument。。。感觉有点笨重。。。用bind修复了它。我正在努力使我的代码更短、更优化,并希望使它看起来更清晰。这是三个不同的东西,它们通常互相矛盾。短代码通常没有经过优化,也不一定清晰易读。可读代码不一定很短,也不一定经过优化。优化后的代码几乎从来都不短也不可读。我正在努力使我的代码更短、更优化,并希望使它看起来更清晰。这是三个不同的东西,它们通常相互矛盾。短代码通常没有经过优化,也不一定清晰易读。可读代码不一定很短,也不一定经过优化。而且优化后的代码几乎从不简短或可读。