2017-08-27 66 views
0

目前我正在寫一個librarySystem如何轉換字符串數組爲一個函數指針集合librarySystem

而且有一個字符串數組[「打招呼」,「名」],如下面的代碼示例依賴關係,但是我需要使用這個stringArray作爲通過使用apply()傳入 greetingToName()的函數數組,是否有任何方法將stringArray轉換爲函數數組?

function greet(){ 
    return 'hi!'; 
} 

function name(){ 
return 'name'; 
} 

function greetingToName (greet, name) { 
console.log(greet() + ' ' + name()); 
} 



var stringArray = ['greet','name']; 

greetingToName.apply(null, stringArray); // this is not working properly , because it passes 'greet' and 'name' as string into function, instead of function pointers. 
+0

你能描述一下這個神祕的*「函數指針數組」嗎?或者添加一個鏈接到某個文件是否存在? – adeneo

+0

您是否嘗試刪除引號,如'var stringArray = [greet,name];' – adeneo

+0

https://jsfiddle.net/3jg7evkw/ – adeneo

回答

0

我在這裏讀大家的解決方案後,我得到了巨大的鼓舞,爲此我想出了這個解決方案在不改變功能方面,你們覺得呢?

var posiableFuncs = { 
    greet : function(){ 
     return 'hi! '; 
    }, 
    name : function(){ 
     return 'Mr. Awesome!'; 
    } 
} 


function greetingToName (greet, name) { 
console.log(greet() + ' ' + name()); 
} 


var stringArray = ['greet','name']; 

// copy the functions and assign into arrayOfFunctions variable based on stringArray 
var arrayOfFunctions = stringArray.map(function(functionName){ 
     return posiableFuncs[functionName]; 
}); 

greetingToName.apply(window, arrayOfFunctions); 
0

您可以創建與2種功能的Object,並通過字符串作爲你想要的,然後看對象內部的名字。

const posiableFuncs = { 
 
    greet:() => { 
 
    return 'hi!'; 
 
    }, 
 
    name:() => { 
 
    return 'name'; 
 
    } 
 
}; 
 

 

 
function greetingToName(greet, name) { 
 
    console.log(posiableFuncs[greet]() + ' ' + posiableFuncs[name]()); 
 
} 
 

 
const stringArray = ['greet', 'name']; 
 
greetingToName.apply(null, stringArray);

0

創建函數變量和數組分配他們會做的伎倆。

東西如下。

var g = function(){ 
return 'hi!'; 
} 

var n = function(){ 
return 'name'; 
} 

function greetingToName (greet, name) { 
    console.log(greet() + ' ' + name()); 
} 



var stringArray = [g,n]; 

小提琴 https://jsfiddle.net/dk_dragonknight/yhL188se/

相關問題