我想使用带有参数的addEventListener调用javascript类方法,使用此关键字
var _this = this;
function onClickBound(e) {
_this.getItemList.call(text_box, e || window.event);
}
if (text_box.addEventListener) {
text_box.addEventListener("change", onClickBound, false);
}
这里没有参数。但我想要参数.ie,。我想调用_this.getItemList('2','4')
代码参考
答案 0 :(得分:0)
您可以使用arguments
中的onClickBound
伪参数来获取已传递的运行时参数,然后使用apply
来调用getItemList
。
像这样(未经测试):
var _this = this;
function onClickBound(e) {
arguments[0] = e || window.event; // Handle IE-ism
_this.getItemList.apply(text_box, arguments);
}
if (text_box.addEventListener) {
text_box.addEventListener("change", onClickBound, false);
}
arguments
是一个伪数组,它在每个函数中预定义并包含函数的参数。 (它不是不是 Array
,但它的行为很像一个,apply
很乐意接受它。)
apply
相当于call
,但是传入类似数组的东西(Array
或arguments
)来指定参数,而不是提供它们作为电话中的离散args。
更新:我想我可能误解了你的问题。让我们再试一次:
如果要在函数中“烧入”(咖喱)参数,可以使用函数工厂函数(创建函数的函数)来执行此操作:
if (text_box.addEventListener) {
text_box.addEventListener(
"change",
createBoundEventHandler(this.getItemList, text_box, '2', '4'),
false
);
}
// Elsewhere with your other utility stuff
function createBoundEventHandler(f, thisArg) {
var args, index;
// Copy all but the first two args; leave a
// gap at the beginning for the event argument
args = [];
for (index = 2; index < arguments.length; ++index) {
args[index-1] = arguments[index];
}
// Return the function
return function(e) {
args[0] = e || window.event; // Handle IE-ism
return f.apply(thisArg, args);
};
}
这比标准的咖喱式函数要复杂一点,因为我们在事件参数的开头留下了这个空白。
如果你不想要事件对象(你曾经说过你想要调用_this.getItemList('2','4')
),这应该可行:
if (text_box.addEventListener) {
text_box.addEventListener(
"change",
bindAndCurry(this.getItemList, text_box, '2', '4'),
false
);
}
// Elsewhere with your other utility stuff
function bindAndCurry(f, thisArg) {
var args, index;
// Copy all but the first two args
args = [];
for (index = 2; index < arguments.length; ++index) {
args.push(arguments[index]);
}
// Return the function
return function() {
return f.apply(thisArg, args);
};
}
答案 1 :(得分:0)
尝试将此语法用于参数化函数。 click here了解更多详情。
var _this = this;
function onClickBound(e) {
_this.getItemList.call(text_box, e || window.event);
}
if (text_box.addEventListener) {
text_box.addEventListener("change", function(){onClickBound("x")}, false);
}
&#13;