Javascript 如何为';这个.getAttribute';
如果我错了,请纠正我。我不确定速记是否正确。但是,这是我能想到的最接近的: 例如:Javascript 如何为';这个.getAttribute';,javascript,Javascript,如果我错了,请纠正我。我不确定速记是否正确。但是,这是我能想到的最接近的: 例如: this.getAttribute 我在我的一个脚本中使用了很多,超过20项 是否可以像这样引用它: getA 还是什么?而不是反复输入this.getAttribute?我知道这似乎是一个第一世界的问题,但我对我的代码非常执着,喜欢最小化,但仍然保持可读性。getA引用this.getAttribute仍然很有意义(无论如何对我来说),本质上,代码更短。有没有办法做到这一点 是的,您可以创建如下函数: func
this.getAttribute
我在我的一个脚本中使用了很多,超过20项
是否可以像这样引用它:
getA
还是什么?而不是反复输入this.getAttribute?我知道这似乎是一个第一世界的问题,但我对我的代码非常执着,喜欢最小化,但仍然保持可读性。getA引用this.getAttribute仍然很有意义(无论如何对我来说),本质上,代码更短。有没有办法做到这一点 是的,您可以创建如下函数:
function getA(element, attr) {
return element.getAttribute(attr);
}
然后,使用getA(this,attr)
代替this.getAttribute(attr)
但是,如果希望使用它来获取同一元素的多个属性,并且希望避免每次传递this
,则可以使用
var getA = this.getAttribute.bind(this);
然后,使用
getA(attr)
而不是this.getAttribute(attr)
是的,您可以创建如下函数:
function getA(element, attr) {
return element.getAttribute(attr);
}
然后,使用getA(this,attr)
代替this.getAttribute(attr)
但是,如果希望使用它来获取同一元素的多个属性,并且希望避免每次传递this
,则可以使用
var getA = this.getAttribute.bind(this);
然后,不要使用
this.getAttribute(attr)
,而是使用getA(attr)
如果调用将一个对象的方法分配给一个var并以此调用它,那么方法中的this
的值将是全局上下文,因为函数上下文绑定到它被调用的位置,所以不能这样做
但是,您可以使用内置函数方法bind
来保留上下文,但仅为方法别名是一个相当昂贵的操作
var getA = this.getAttribute.bind(this);
getA("yourAttribute");
或者在调用上下文时使用call
强制上下文
var getA = this.getAttribute;
getA.call(this,"yourAttribute");
但这两种方法都不是很好,在大多数情况下,您需要做的就是将实际返回值保留在var中并重用它,而不调用getter。getter是冗长的,因为这是一种使昂贵的方法看起来昂贵的好方法,并且首先不鼓励人们连续调用它20次。通常,只有当您希望得到不同的结果时才应调用它们
var a = this.getAttribute("yourAttribute");
当你说你在20个不同的地方调用它20次时,我相对确定那些地方并不是期望值不同的20个地方,特别是当它们在同一个函数范围内时
如果您正在处理自定义的数据-*
属性,您也可以直接从元素的.data
属性中检索它,它是所有数据属性的映射,这是理想的场景
<element data-your-attribute="yourData"></element>
var a = this.data.yourAttribute; //automatically updated and name converted from dash to camelCase
var a=this.data.yourAttribute//自动更新并将名称从破折号转换为camelCase
(所有示例都假定此引用您的元素,而您的函数是元素的一个方法)如果您调用将对象的一个方法分配给一个var并以此调用它,则方法中的该的值将是全局上下文,因为函数上下文绑定到调用它的位置,所以你不能这么做 但是,您可以使用内置函数方法
bind
来保留上下文,但仅为方法别名是一个相当昂贵的操作
var getA = this.getAttribute.bind(this);
getA("yourAttribute");
或者在调用上下文时使用call
强制上下文
var getA = this.getAttribute;
getA.call(this,"yourAttribute");
但这两种方法都不是很好,在大多数情况下,您需要做的就是将实际返回值保留在var中并重用它,而不调用getter。getter是冗长的,因为这是一种使昂贵的方法看起来昂贵的好方法,并且首先不鼓励人们连续调用它20次。通常,只有当您希望得到不同的结果时才应调用它们
var a = this.getAttribute("yourAttribute");
当你说你在20个不同的地方调用它20次时,我相对确定那些地方并不是期望值不同的20个地方,特别是当它们在同一个函数范围内时
如果您正在处理自定义的数据-*
属性,您也可以直接从元素的.data
属性中检索它,它是所有数据属性的映射,这是理想的场景
<element data-your-attribute="yourData"></element>
var a = this.data.yourAttribute; //automatically updated and name converted from dash to camelCase
var a=this.data.yourAttribute//自动更新并将名称从破折号转换为camelCase
(所有示例均假定此引用您的元素,而您的函数是您元素的一种方法)总结如下:
@阿迪内奥说:
function getA(element, attr)
{
return element.getAttribute(attr);
}
我说,
Element.prototype.getA = Element.prototype.getAttribute
它可以用作:
var attr = getA(document.getElementById("test"), "attr"); //Adeneo
var attr = document.getElementById("test").getA("attr"); //Mouser
我强烈建议不要扩展元素对象
jQuery执行以下操作:
它们有自己的主函数对象$
。该函数有一个名为attr
的方法。因此,主函数对象在页面上找到一个元素,您可以调用该元素的方法attr
$("element").attr("attr");
复制:
var masterFunction = function(selector)
{
this.result = document.querySelectorAll(selector);
}
var selectElement = function(selector)
{
return new masterFunction(selector);
}
masterFunction.prototype.attr = function(attr)
{
var returnArray = [];
Array.prototype.forEach.call(this.result, function(element){
if (element.hasAttribute(attr))
{
returnArray.push(element.getAttribute(attr))
}
});
return returnArray;
}
请记住,这与jQuery一样返回一个包含结果的数组。总结一下:
@阿迪内奥说:
function getA(element, attr)
{
return element.getAttribute(attr);
}
我说,
Element.prototype.getA = Element.prototype.getAttribute
它可以用作:
var attr = getA(document.getElementById("test"), "attr"); //Adeneo
var attr = document.getElementById("test").getA("attr"); //Mouser
我强烈建议不要扩展元素对象
jQuery执行以下操作:
它们有自己的主函数对象$
。该函数有一个名为attr
的方法。因此,主函数对象在页面上找到一个元素,您可以调用该元素的方法attr
$("element").attr("attr");
复制:
var masterFunction = function(selector)
{
this.result = document.querySelectorAll(selector);
}
var selectElement = function(selector)
{
return new masterFunction(selector);
}
masterFunction.prototype.attr = function(attr)
{
var returnArray = [];
Array.prototype.forEach.call(this.result, function(element){
if (element.hasAttribute(attr))
{
returnArray.push(element.getAttribute(attr))
}
});
return returnArray;
}
请记住,这与jQuery一样返回一个包含结果的数组。当然,只需将其替换为一个名为
attr(this,what)
etcwhat aboutvar getA=this.getAttribute
?但这并不是OCD真正需要考虑的问题,您应该更关注编写可读且格式良好的代码,然后只需