在Javascript中,語法a.b
可以替換爲a["b"]
。所以你的情況,你可以使用
window["funcOne"](target)["funcTwo"](x, y, z);
僅當您使用變量而不是"funcOne"
和"funcTwo"
這裏當然是有意義的。
如果一切而不是固定的,但你只是想延後執行,你可以使用「置信轉換」與匿名封閉與
x = function(){ return funcOne(target).funcTwo(x, y, z); };
,然後你可以用x()
評估以後得到期望的結果。
的最後一個例子將正常工作,即使變量target
和x
,y
和z
是局部的封閉範圍,因爲置信轉換關閉將「捕捉」他們。
但是你應該注意一個事實,即在Javascript中創建一個新範圍的唯一方法是使用一個函數(一個包含{
和}
的塊不是像在C++和其他語言中那樣的範圍)。
如果你需要在一個循環這可以咬回來,是一個相當常見的錯誤的源創建幾個倒閉......
for (var i=0; i<options.length; i++)
{
var menu_item = document.createElement("div");
menu_item.textContent = "Option " + i;
menu_item.onclick = function() {
// Warning this will NOT work. All divs will
// alert using the same number!
alert("Option " + i + " selected");
}
menu.appendChild(menu_item);
}
這裏我使用了一個閉合的onclick
事件上的div但這不起作用,因爲所有這些函數都會使用相同的i
變量。因爲在Javascript來創建範圍的唯一方法是使用功能的解決方案是:
for (var i=0; i<options.length; i++)
{
var menu_item = document.createElement("div");
menu_item.textContent = "Option " + i;
(function(i){
menu_item.onclick = function() {
alert("Option " + i + " selected");
};
})(i); // Pass current `i` as parameter
menu.appendChild(menu_item);
}
這樣,onclick
處理程序內的變量i
將是每個封閉不同。
創建函數只是爲了立即調用它的這種模式經常用在Javascript中,因爲當你需要創建許多獨立的閉包時,所以最好能夠知道並理解它。
所以你正在試圖構建一個類似Firebug的命令行?請多給點信息。 「eval」可能是正確的選擇,取決於你想達到的目標。 – user123444555621
我沒有看到你怎麼會在這個問題上感到困惑,認爲我想製作一個類似螢火蟲的命令行,但我的意思是我想調用一個從未知的信息生成的函數在運行前,所以我保存並執行它,但是如何? – pathurs