2012-05-30 45 views
3

說實話,我可以調用函數,但只是以硬編碼的方式。而不是硬編碼提交綁定我的getData函數,我想通過參數調用函數。請幫助我,如何做到這一點。如何在JavaScript中調用實例化類的函數?

謝謝。

formhandler = new xForm.Main(); // new formhandler 
formhandler.setForm(this.formid); // fn.setForm(string) // configure the container, which has the form elements, or the form itself 
modal = new xModal.Main(); // new modal handler 
modal.setModal(this.modalid); // set modal element 
modal.showModal(); // show 
modal.bindClose(".cancel"); // bind closing classes 
modal.bindSubmit(".submit", formhandler, "getData"); // bind submit to call formhandler.getData() 
在xModal.js

var xModal = xModal || {}; 

xModal.Main = function() 
{ 
    var self = this; 
    ... 

this.bindSubmit = function(classname, a, b) 
{ 
    this.closeclass = classname; 
    $("#"+this.target).find(classname).click(function(){ 
     a.call(b); // edited after the original post, i forgot to replace the call's argument to b in the question excuse me for the inaccuracy 
    }); 
} 

這個函數應該調用在XFORM中的getData(這裏是XFORM片斷)

var xForm = xForm || {}; 

xForm.Main = function() 
{ 
var self = this; 
this.target = ""; 
this.data = {}; 

... 

this.getData = function() 
{ 
    getSingleElements(); 
    getMultiElements(); 
    return returnData(); 
} 

更新:

我想我只是發現這樣做的方法,但請告訴我,如果我做uncorrectly的東西,或者你有這個問題更好的解決方案(我敢肯定有人有)

我想,我有正確的方法。

在我犯了一個FN,它通過參數調用函數包含在自身的XFORM(其等於這一點,實際上)

var xForm = xForm || {}; 

xForm.Main = function() 
{ 
var self = this; 

this.callFn = function(func) 
{ 
    return self[func].call(this); 
} 

... 

然後調用從另一個類(xModal)將fn

var xModal = xModal || {}; 

xModal.Main = function() 
{ 
var self = this; 
this.bindSubmit = function(classname, a, b) 
{ 
    this.closeclass = classname; 
    $("#"+this.target).find(classname).click(function(){ 
     a.callFn(b); 
    }); 
} 

然後我只是要告訴xModal這樣的:

modal.bindSubmit(".submit", formhandler, "getData"); // bind submit to call formhandler.getData() 

所以現在的模式ç lass將調用args [1]的args [2]函數。也可以通過應用方法給呼叫fn提供更多的參數。

對我很好,但我不知道,也許你可以幫助我做得更好。

回答

1

你一定對象的方法名稱綁定到提交事件:

modal.bindSubmit(".submit", formhandler, "getData"); 

但是你想傳遞參數的方法爲好。這不是Javascript的方式。相反,只要綁定一個匿名函數的事件,並調用但是你從這個匿名函數中喜歡的方法:

modal.bindSubmit(".submit", function(){ 
    formhandler.getData("My arguments"); 
}); 

你在我的例子中看到什麼是作爲參數傳遞一個匿名函數。在Javascript中,像字符串或整數這樣的值與函數之間沒有區別。一個函數可以被分配給一個變量,並作爲參數傳遞。

爲了使它更清楚,你也可以寫這樣的:

var eventHandler = function(){ 
    formhandler.getData("My arguments"); 
}; 

modal.bindSubmit(".submit", eventHandler); 

這就是所謂的「第一類函數」,並且是「函數式編程」模式的一部分。

在事件處理程序函數中,您仍然可以訪問它創建的scooe中的變量,如formhandler對象。這被稱爲「封閉」。

閱讀原文。一開始,它會讓你大開眼界,但它確實值得你花時間,因爲它會讓你的眼睛看起來更簡單。

從你的例子中,我不確定對象模態是什麼。如果它是一個jQuery元素,我的示例應該馬上工作,另外,您需要更新代碼來調用傳入的作爲事件處理函數的函數,而不是在對象上調用方法。

+0

我不明白,對不起。 :(請解釋一下。 –

+0

@Répás:我更新了我的答案,以解釋代碼的作用。請測試它,並接受我的答案,如果它適合你。 – geon

相關問題