2012-07-02 78 views
0

我有下面的代碼,我使用製作一個簡單的模板引擎。html頁面如下: -如何將字符串轉換爲JavaScript中的函數?

<ns tmp="red"></ns> 
<ns tmp="blue"></ns> 

在另一方面,我有一個JavaScript作爲一個jQuery插件讀取標籤然後獲取tmp 的屬性,現在我想要接收該字符串的值,然後將其轉換爲函數,以便在對象內部調用預定義的值,但將字符串轉換爲函數不起作用。我在堆棧溢出中提到了一些問題,但沒有用。然後我提到下面的JQuery代碼。

(function($){ 

    /*Collection of the template data*/ 
    var k=template(); 
    /*This retrieves all the custom tags and gets the template 
    property to point to.*/ 
    var templateArray=$('ns'); 
    templateArray.each(function(){ 
    var template=$(this).attr('tmp'); 
    var funcName=window[template]();//This does not work 
    alert(l()); 
    }); 
})(jQuery); 

    function template(){ 
     var t={ 
      blue:function(){ 
      return "Hello"; 
      }, 
      red:function(){ 
      return "ff"; 
      } 
     }; 
     return t; 
    } 

請建議如何與此相處。我也有這個小提琴。隨意編輯,這樣我就能夠調用的對象內部的功能在某些way.Thanks 小提琴鏈接FIDDLE LINK

+0

你調用'窗口[「紅色」]'和'窗口[「藍」];'但目前還沒有被命名爲紅色和藍色的窗口中定義的方法。 – 0x499602D2

+1

所以你實際上想調用k [模板],而不是窗口[模板],對不對? – Qnan

+0

@David考慮我想獲取函數或將字符串轉換爲函數,並將其稱爲k.MyFunction()。而不是將它附加到窗口上,還有其他方法可以使用對象k來調用其中的函數。藍色 –

回答

1

在JavaScript對象和數組是相同的東西。所以template.redtemplate['red']是同樣的事情。

我建議把函數放入數組中。這樣你甚至可以在運行時擴展它。

http://jsfiddle.net/tricki/YS9Gs/10/

+0

這就是我正在尋找的對象和數組的答案。感謝您的解釋。 –

1

也如在評論中指出,要執行的功能不是window的一部分對象,而是您的template對象的一部分,因此您需要將它們從適當的位置取出。

此外,對局部變量使用相同名稱的現有函數可能有效,但根本不是一個好主意,您最好使用正確的名稱。

工作代碼:

templateArray.each(function(){ 
    var tmp = $(this).attr('tmp'); 
    var funcName=k[tmp]; 
    var result = funcName(); 
    alert(result); 
}); 

Updated fiddle

相關問題