1

我有代码(在一个对象内) onclick: this._addX.bind(this) ,然后在另一个对象内 onclick: this._addY.bind(this)

现在,_addX() 和 _addY 几乎相同,除了它们最终都调用(在单击事件上)具有不同参数值的函数,例如 _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
},
4

3 回答 3

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 的元素并单击它进行测试(没有警报)。如果您的 onclick 是类中的函数/事件处理程序,而不是普通的元素单击事件,那么情况会略有不同 - 在http://mootools.net/shell/上发布您的工作框架

于 2010-01-10T17:11:14.280 回答
1

如果您阅读了我之前的答案,请忽略它。MooTools.bind方法支持传递参数。所以其他东西没有像你期望的那样工作:

onclick: this._add.bind(this, 'y');

这是JSBin 上的一个简单设置,以显示 bind 是如何真正传递参数的。

于 2010-01-10T04:43:37.953 回答
0

bind的唯一目的是“告诉” JS 当你说this. 即,您将作为参数传递给您希望关键字将在您使用的函数内部引用bind的对象的实例。thisbind

于 2010-01-10T04:38:08.923 回答