我有代码(在一个对象内)
onclick: this._addX.bind(this)
然后在另一个对象里面
onclick: this._addY.bind(this)
现在,_addX()和_addY几乎相同,只是它们最终调用(在click事件上)一个具有不同参数值的函数,比如_addX调用foo('x')和_addY调用foo('y') )。所以我试过了:
两个对象中的
onclick: this._add.bind(this,'x')
和
onclick: this._add.bind(this,'y')
。当然我改变了_add来接受一个论点。
在运行时,当调用_add时,它看不到任何传入的参数!我用不同的语法摸索,但没有任何作用。有任何想法吗?原始语法工作正常(没有参数),但迫使我复制一个只有一行不同的大函数,这让我很痛苦。提前谢谢。
_add: function(which) {
var me = this;
var checkFull = function(abk) {
if (abk.isFull) {
alert("full");
} else {
alert(which); // which is always undefined here!
}
};
getAddressBook(checkFull); //checkFull is a fn called by getAddressBook
},
答案 0 :(得分:3)
这是有效的,它将范围保持在元素单击事件中,范围设置为类而不是元素 - 将范围传递给add方法没有意义,它已经具有:
var foo = new Class({
Implements: [Options],
add: function(what) {
alert(what);
},
initialize: function(options) {
this.setOptions(options);
this.options.element.addEvents({
click: function() {
this.add(this.options.what);
}.bind(this)
});
}
});
window.addEvent("domready", function() {
new foo({
element: $("foo"),
what: "nothin'"
});
});
只需创建一个id = foo的元素,然后单击它进行测试(警告nothin')。如果你的onclick是你班级中的一个函数/事件处理程序而不是普通的元素点击事件,那么事情就会略有不同 - 在http://mootools.net/shell/上发布你工作的工作框架
答案 1 :(得分:1)
如果您阅读我以前的答案,请忽略它。 MooTools .bind
方法支持传递参数。所以别的东西没有像你期望的那样工作:
onclick: this._add.bind(this, 'y');
这是一个simple setup on JSBin,用于显示bind如何真正传递参数。
答案 2 :(得分:0)
绑定的唯一目的是“告诉”JS当你说this
时你的意思是什么。即你作为一个参数传递给bind
你希望this
关键词在你使用bind
的函数内部引用的对象实例。