2017-03-29 75 views
2

如何在函數名稱爲字符串時調用函數?例如如何調用函數並在函數名稱爲字符串時傳遞參數?

$scope.ExecuteFunction = function (func,val) { 
    // here func="GetActivityInfo" and val="ERF000000000A6543" 
    // How to Invoke function named in variable func and pass val as parameter ? 
    // GetActivityInfo(val) to be invoked. 
} 

var GetActivityInfo = function (elementId) { 
    // some code  
}; 
+0

全局函數是全局對象(即瀏覽器中的「窗口」)的屬性。所以'window [func](val)'應該做的竅門 – devnull69

+0

確保你沒有func的括號。 – anoop

+0

'GetActivityInfo'是其父函數的私有屬性。它只能通過[closure](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures)訪問。它不能被[property accessor]訪問(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors)。它需要成爲可訪問對象的屬性。 – georgeawg

回答

1

如果該功能是在window的範圍,你可以使用這個:

window[func](val); 
+0

我收到此錯誤。窗口[func]不是函數 – himanshu

+0

在這種情況下,該函數不在窗口的範圍內。邏輯工作雖然 - 你只需要使用正確的父母。 –

0

您可以使用apply() or call()實現它,

var test = func.apply(test,val);此行應添加

定義:

--->隨着call()apply()可以設置的this值,並調用作爲function現有對象的新方法。 call()apply()之間

差異:)

--->呼叫(另取函數參數,並應用()將功能參數在陣列中。

<!DOCTYPE html> 
 
<html> 
 
<body> 
 

 
<p id="demo"></p> 
 

 
<script> 
 
var myObject, myArray; 
 
function myFunction(func,val) { 
 
    var test = func.apply(test,val); 
 
} 
 
function myFunction2(val) { 
 
    alert(val) 
 
} 
 
myObject = myFunction(myFunction2, ['myArray called using apply ']);  // Will return the value called from inside using `apply` 
 
document.getElementById("demo").innerHTML = myObject; 
 
</script> 
 

 
</body> 
 
</html>

請運行上面的代碼中

+0

@himanshu shekhar,請檢查我的答案。 – Sravan

+0

'會返回20'嗎?另外我不確定這是回答這個問題,OP指出函數要作爲一個字符串存儲在一個變量中。這裏沒有包含函數名稱的字符串。 –

+0

@MarcCompte,謝謝,我的歉意,評論是從原始文檔,該函數被採納的表單,註釋被更改,評論可能是錯誤的,但答案是正確的。 :) – Sravan

0

,請確保你沒有在參數括號,試試下面的瀏覽器控制檯:

function addUser(id, callback) { 
    callback(id); 
} 

function callback(id) { 
    alert(id); 
} 

addUser(1, callback); 
0

GetActivityInfo是其父功能的私有財產。它只能由closure訪問。它不能被property accessor訪問。它需要被製成可訪問的對象的屬性:

var accessibleObj = { GetActivityInfo: GetActivityInfo }; 

$scope.ExecuteFunction = function (func,val) { 
    // here func="GetActivityInfo" and val="ERF000000000A6543" 
    // How to Invoke function named in variable func and pass val as parameter ? 
    // GetActivityInfo(val) to be invoked. 
    accessibleObj[func](val); 
} 

//var GetActivityInfo = function (elementId) { 
function GetActivityInfo (elementId) { 
    // some code  
}; 

在上述例子中的專用變量(初始化爲匿名功能)改變爲一私人功能,使得它可能是hoisted

相關問題