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 about
var getA=this.getAttribute
?但这并不是OCD真正需要考虑的问题,您应该更关注编写可读且格式良好的代码,然后只需