2009-06-08 112 views
1

使用prototype.js,我創建了這將是一個構造函數的參數自定義對象:如何使用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選擇,我有一個名爲「更新」的回調函數,該函數中的參數我的課。

現在,我想傳遞一個額外的參數到「更新」功能,但不是直接在類中。

我願做這樣的事情:

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

顯然,這是行不通的,我怎麼會做同樣的事情?

回答

1

在原型中,可以使用bind函數(屬於所有函數)預先填充值並分配上下文。您可以使用咖喱功能,而是如果你不需要使用上下文參數

例如:

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)}); 

對綁定的詳細信息,請參閱http://www.prototypejs.org/api/function/bindhttp://www.prototypejs.org/api/function/curry關於curryad的信息

編輯

改變你的更新功能:

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

然後使用咖喱預先定義的元素或如上結合。

我假設回調期望有一個參數的函數,並且您希望它需要一秒鐘,您可以在設置回調時定義它。在這種情況下,參數的順序非常重要。咖喱和綁定可以用來從一開始就預加載參數,因此,你想要預加載的參數應該在任何其他參數之前被定義。希望能夠清除所有事情。

+0

是的,我嘗試了綁定功能。 但我得到一個「未定義」變量使用綁定或咖喱。 update.bind(this,'ok') ... update.curry('ok'); ... var update = function(d,el){console.log(el); // el是undefined } – kevin 2009-06-08 08:58:32

1

我不太清楚你想完成什麼,但是這樣的事情?

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

「元素」未定義使用此。 其實我實例化日曆,oncalchange是一個事件函數(Prototype.emptyFunction),當我更改日曆中的值時調用。 – kevin 2009-06-08 08:54:59

相關問題