使用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);
}
显然它不起作用,我怎么能做类似的事情?
答案 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可用于从头开始预加载参数,因此,您应该在任何其他参数之前定义要预加载的参数。希望这样做可以解决问题。