如何为'this.getAttribute'创建速记

时间:2015-01-30 22:10:21

标签: javascript

如果我错了,请纠正我。我不确定速记是否正确。但是,这是我能提出的最接近的:

例如: this.getAttribute

我在我的一个脚本中使用了很多,超过20个项目。

是否可以像以下一样引用它:

getA

是什么?而不是一遍又一遍地输入this.getAttribute?我知道这似乎是第一个世界的问题,但我对我的代码非常强迫,并且喜欢最小但仍然保持可读性。 getA引用this.getAttribute仍然有很多意义(无论如何对我来说),实质上是更短的代码。有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:2)

如果调用将一个对象的方法赋给var并通过它调用它,那么方法中的this的值将是全局上下文,因为函数上下文被绑定到它所调用的位置来自,所以你不能这样做。

但是,您可以使用内置函数方法bind来保留上下文,但这只是为您的方法设置别名的相当昂贵的操作。

var getA = this.getAttribute.bind(this);
getA("yourAttribute");

或使用call在您调用时强制执行上下文

var getA = this.getAttribute;
getA.call(this,"yourAttribute");

但两者都不是很好,在大多数情况下,您需要做的就是将实际的返回值保存在var中并重用它,而根本不调用getter。吸气剂是冗长的,因为这是使昂贵的方法看起来昂贵的好方法,并且阻止人们首先连续20次调用它。通常只有在您预期不同的结果时才会调用

var a = this.getAttribute("yourAttribute");

当你说你在20个不同的地方叫它20次时我相对肯定那些不是20个期望值不同的地方,特别是当它们在相同的功能范围内时。

如果您正在处理自定义data-*属性,您也可以直接从元素的.data属性中检索它,它是所有数据属性的映射,这是理想的场景。 / p>

<element data-your-attribute="yourData"></element>

var a = this.data.yourAttribute; //automatically updated and name converted from dash to camelCase

(所有示例假设this引用您的元素,而您的函数是元素的方法)

答案 1 :(得分:1)

是的,你可以创建一个这样的函数:

function getA(element, attr) {
    return element.getAttribute(attr);
}

然后,使用this.getAttribute(attr)而不是getA(this, attr)

但是,如果你想用它来获取同一元素的几个属性,并且你想避免每次都避免传递this,你可以使用

var getA = this.getAttribute.bind(this);

然后,使用this.getAttribute(attr)而不是getA(attr)

答案 2 :(得分:1)