2009-01-09 108 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”回调来处理它们。