2011-04-08 13 views
9

मैं इस तरह के एक समारोह को लिखना चाहता हूं:मैं कॉलबैक फ़ंक्शन को स्वीकार करने वाले फ़ंक्शन को कैसे लिख सकता हूं और इसे 'सुरक्षित' तरीके से चला सकता हूं?

function doGoodJob(someId, callBackfunction){ 

// some stuff with someId 

// todo: RUN callBackFunction here 

} 

वे कहते हैं कि कोड इंजेक्शन के मामले में eval 'खतरनाक' है।

तो, एक जावास्क्रिप्ट फ़ंक्शन लिखने का सबसे अच्छा अभ्यास क्या है जो कॉल-बैक फ़ंक्शन स्वीकार करता है और इसे सुरक्षित रूप से चलाता है?

उत्तर

23

अपने कॉलबैक एक स्ट्रिंग या एक वास्तविक समारोह है?

इसकी तो एक समारोह ..

function doGoodJob(someId,callbackFunction) 
{ 
    callbackFunction(); 
} 

doGoodJob(1,function(){alert('callback');}); 

तो इसकी एक स्ट्रिंग आप Function निर्माता का उपयोग कर सकते हैं।

function doGoodJob(someId,callbackFunction) 
{ 
    var func = new Function(callbackFunction) 
    func(); 
} 
doGoodJob(1,"alert('test');"); 

या परीक्षण दोनों के लिए ..

function doGoodJob(someId,callbackFunction) 
{ 
    var func = (typeof callbackFunction == 'function') ? 
     callbackFunction : new Function(callbackFunction); 

    func(); 
} 

doGoodJob(1,function(){alert('callback');}); 
doGoodJob(1,"alert('test');"); 
2

यह काम करना चाहिए:

function doGoodJob(simeOd, callBackFunction){ 
    /** Do stuff **/ 
    callBackFunction(); 
} 

त्वरित बेला: http://jsfiddle.net/pS67X/

2

हालांकि इस विषय से देर हो गई, बस कुछ बात adde करना चाहता था। ऊपर समाधान समाधान के रूप में चेतावनी या गुजरने के लिए काम करता है, लेकिन नीचे के मामले में नहीं।

doGoodJob(1, "someCallbackFunction"); 
function someCallBackFunction() { 
    alert("im called"); 
} 

बजाय अगर उपयोग eval (callbackFunction) की तरह नीचे

function doGoodJob(someId,callbackFunction) { 
    var func = (typeof callbackFunction == 'function') ? 
    callbackFunction : eval(callbackFunction); 

    func(); 
} 
doGoodJob(1,someCallBackFunction); 
doGoodJob(1,"someCallBackFunction"); 
संबंधित मुद्दे

 संबंधित मुद्दे