0

从 JSON 中,我想请求构造函数的名称并让它在 javascript 中执行。

json.js

{
    objArray = [
        {
            "funcName":"executeMe"
        }
     ]
}

page.js

var newInstance = createInstanceByName(objArray[0].funcName); //"executeMe"
//Functions like: var newInstance = new lib.executeMe();

lib.js(我无法控制)看起来像这样:

(lib.executeMe = function() {
    this.initialize(img.executeMe);
}).prototype = new cjs.Bitmap();
p.nominalBounds = new cjs.Rectangle(0,0,200,200);

我希望我可以重新利用这个线程的解决方案,但重要的是变量 newInstance 在整个 page.js 中可供我使用 - 让我传递上下文是不够的。我需要在这里完成任务。

createInstanceByName() 如何工作?

4

1 回答 1

2
function createInstanceByName(funcName) {
    return new lib[funcName];
}

如果您需要传递参数,请将它们放在一个数组中,然后改为:

function createInstanceByName(funcName, args) {
    var inst = Object.create(lib[funcName].prototype)
    lib[funcName].apply(inst, args);
    return inst;
}

您还可以arguments通过切片而不是使用数组来使用对象。

Object.create方法在旧浏览器中不可用,但可以为此目的进行足够的填充。

于 2013-02-23T00:56:49.543 回答