未捕获的TypeError:使用变量创建对象时,undefined不是函数

时间:2013-11-22 12:44:38

标签: javascript fabricjs

我正在尝试以下列方式创建Fabric.js对象,但由于某种原因,我被卡住了。

var object='fabric.Circle',
     objects={};                         

objects['test1'] = new window[object](); 

它将第3行中的错误称为Uncaught TypeError: undefined is not a function,您可以在控制台中检查相同内容。

jsfiddle中的示例。

2 个答案:

答案 0 :(得分:1)

你没有按预期获得对象。您的代码在窗口对象上查找名为fabric.Circle的属性,而不是Circle对象的window.fabric属性。您可以使用以下代码执行此操作:

var object='fabric.Circle',
     objects={};                        

 objects['test1']=new getObj(object)(); 


function getObj(path) {
  path = path.split('.');
  var obj = window;
  while (path.length) {
    obj = obj[path.shift()];
  }
  return obj;
}

DEMO:http://jsbin.com/ABIgoMiR/1/edit

答案 1 :(得分:1)

您必须解析object 在这里演示:http://jsfiddle.net/L4WyP/

function getProp(prop) {
    var parts = prop.split('.');
    var obj = window;

    do {
        obj = obj[parts.shift()];
    } while (parts.length);

    return obj;
}

var object = 'fabric.Circle',
    objects = {};

objects['test1'] = new (getProp(object))();