2013-05-13 159 views
3

我已經創建了一個實用程序的API來創建函數對象並調用其API函數的如何動態地將多個參數傳遞給函數?

function FunctionUtils() { 

} 

FunctionUtils.createFunctionInstance = function(functionName) { 
    var obj = FunctionUtils.createFunctionInstanceDescend(window, functionName); 
    return new obj(); 
} 

FunctionUtils.createFunctionInstanceDescend = function(obj, path) { 
    var parts = path.split('.'); 

    for(var i = 0; i < parts.length; i++) { 
     obj = obj[parts[i]]; 
    } 

    return obj; 
} 


FunctionUtils.invokeAndInflate = function(object, functionName, parameterValue) { 
    object[functionName](parameterValue); 
} 

此的Util API的工作,爲下面的代碼:

function Student() { 

    var firstName; 

    var city, country; 

    this.getFirstName = function() { 
      return firstName; 
    } 

    this.setFirstName = function(val) { 
      firstName = val; 
    } 

    this.getAddress() { 
      return city + country; 
    } 

    this.setAddress(val1, val2) { 
      city = val1; 
      country = val2; 
    } 

} 


var student = FunctionUtils.createFunctionInstance("Student"); 
FunctionUtils.invokeAndinflate(student, "setFirstName", "Pranav"); //Works 

FunctionUtils.invokeAndInflate(student, "setAddress", "LA", "USA"); //Doesn't Work. 

如何使用FunctionUtils.invokeAndInflate API超過一個參數? ?

回答

3

可以改寫爲以下FunctionUtils.invokeAndInflate功能:

FunctionUtils.invokeAndInflate = function(object, functionName, parameterValue) { 
    object[functionName].apply(object, Array.prototype.slice.call(arguments, 2)); 
} 
+0

您可以從函數調用下降的參數,如果你想,從'arguments'讓他們所有。最後一個至少應該被刪除。 – 2013-05-13 13:45:01

相關問題