如何使用prototype.js在回调函数中添加参数?

时间:2009-06-08 08:34:11

标签: javascript oop prototypejs

使用prototype.js,我创建了一个自定义对象,它将成为构造函数的参数:

var options = Object.extend({month: date[0],
                             year: date[1],
                             day: date[2],
                             oncalchange: update});
// update is defined like that :
var update = function(d){
    // bla bla
}

// Calling my class
var myObject = new myClass (options);

在oncalchange选项中,我有一个名为“update”的回调函数,它在myClass中接受一个参数。

现在,我想将一个额外的参数传递给“update”函数,但不是直接在类中传递。

我想做那样的事情:

// element is the parameter I want to add
var update = function(d, element){
    alert(element);
}

显然它不起作用,我怎么能做类似的事情?

2 个答案:

答案 0 :(得分:1)

我不太确定你想要完成什么,但这样的事情呢?

var options = Object.extend({month: date[0],
                                 year: date[1],
                                 day: date[2],
                             oncalchange: function(d){ return update(d, 'somethingelse');}
                             });

答案 1 :(得分:1)

在原型中,您可以使用绑定函数(属于所有函数)预填充值,并分配上下文。如果您不需要使用上下文参数

,则可以使用curry函数

例如:

var options = Object.extend({month: date[0],
                                 year: date[1],
                                 day: date[2],
                             oncalchange: update.bind(this,arg1, arg2)});

var options = Object.extend({month: date[0],
                                 year: date[1],
                                 day: date[2],
                             oncalchange: update.curry(arg1,arg2)});

有关bind的更多信息,请参阅http://www.prototypejs.org/api/function/bind 关于curryad的信息http://www.prototypejs.org/api/function/curry

修改

将更新功能更改为:

var update = function(element,d){
    alert(element);
}
然后

使用咖喱或绑定预先定义元素。

我假设回调期望带有一个参数的函数,并且您希望它在设置回调时花费一秒钟来定义。在这种情况下,参数的顺序非常重要。 curry和bind可用于从头开始预加载参数,因此,您应该在任何其他参数之前定义要预加载的参数。希望这样做可以解决问题。