2009-01-09 137 views
2

我正在嘗試編寫一個加載腳本文件的JavaScript類,因爲它們是需要的。我大部分工作。它可以使用以下語法庫:惰性加載外部Javascript文件

var scriptResource = new ScriptResource('location/of/my/script.js'); 
scriptResource.call('methodName', arg1, arg2); 

我想添加一些額外的語法糖,所以你可以寫

var scriptResource = new ScriptResource('location/of/my/script.js'); 
scriptResource.methodName(arg1, arg2); 

我幾乎可以肯定,這個心不是可能的,但有可能是創造性的解決方案。我想有什麼需要是某種methodCall事件。所以下面可以工作

ScriptResource = function(scriptLocation) 
{ 
    this.onMethodCall = function(methodName) 
    { 
     this.call(arguments); 
    } 
} 

這段代碼顯然是非常不完整,但我希望它給的什麼,我試圖做

是這樣的,甚至遠程可能的想法?

+0

你不能寫「ScriptResource = new function」。 – 2009-01-09 11:33:19

+0

我們是否可以看到當前`call()`實現的代碼 - 如果我們不知道腳本如何工作,很難建議替代解決方案... – Christoph 2009-01-09 12:29:26

回答

0

如果一套方法名是有限的,那麼你可以生成這些方法:

var methods = ["foo", "bar", "baz"]; 
for (var i=0; i<methods.length; i++) { 
    var method_name = methods[i]; 
    WildCardMethodHandler[method_name] = function() { 
     this.handleAllMethods(method_name); 
    }; 
} 

編輯:發佈極大地改變了問題之前,這個答案。

+0

我無法控制這個功能。我需要調用任何方法。我做了一個很大的編輯,以顯示我以後的用法。 – 2009-01-09 11:25:11

+0

我幾乎以爲我回答了錯誤的問題。你做了一些真正廣泛的編輯。 – 2009-01-09 11:30:28

0

中介的解決方案可能應具有以下語法:

var extObj = ScriptResource('location/of/my/script.js'); 
extObj('methodname')(arg1,arg2); 

代碼可能是這樣的:

function ScriptResource(file) { 
    return function(method) { 
    loadExternalScript(file); 
    return window[method]; 
    } 
} 

各種假設在上面的代碼,我讓你找出自己。最有趣的,恕我直言,是 - 在你原來的實現 - 你如何獲得代理方法同步運行並返回一個值? AFAIK只能異步加載外部腳本,並通過「onload」回調來處理它們。