THRE.JS动态创建对象
THREE.JS Creating an object dynamically
我有JSON配置,比如:
{ shape:[ 'SphereGeometry', [7, 16, 16] ] }
并尝试加载类似的模型:
new THREE[shape[0]].apply( this, shape[1] )
正如你所看到的,"new"answers"apply"在这里不是一个选项。有人知道我如何在这里解决问题的诀窍吗?
提前谢谢。
该解决方案基于使用带有';新';操作人员这可能吗?
JSON配置
{ shape: 'SphereGeometry', properties: [ null, 7, 16, 16 ] }
并创建一个新对象:
new (Function.prototype.bind.apply( THREE[object.shape], object.properties ))
通常将.apply()和new一起使用不是一个很好的过程,但它的过程如下:
function dynamicShape() {
return THREE[shape[0]].apply(this, shape[1]);
}
dynamicShape.prototype = THREE[shape[0]].prototype;
var sphere = new dynamicShape();
这应该行得通。下面是一个使用一些示例代码进行渲染的fiddle:http://jsfiddle.net/jcc6zbtn/
这里有一种方法,使用reviver函数。其优点是解析过程直接负责实例化正确的对象类型,而不是分两步进行。
var shapes = { 'Rectangle': Rectangle }, //same as THREE in your code
shapeJson = '{ "shape": ["Rectangle", [2, 4]] }',
shape = shapeFromJson(shapeJson);
console.log(shape);
function instanciate(ctor, args) {
var instance = Object.create(ctor.prototype);
ctor.apply(instance, args);
return instance;
}
function createShape(shape, args) {
return instanciate(shapes[shape], args);
}
function shapeFromJson(json) {
return JSON.parse(json, function (key, val) {
return key? val : createShape(val.shape[0], val.shape[1]);
});
}
function Rectangle(height, width) {
this.height = height;
this.width = width;
}
相关文章:
- 如何使用javascript从主svg对象动态创建svg视图框
- 为json对象创建一个动态表
- JavaScript - 有没有办法动态创建对象的新实例
- 从CSV动态创建对象
- 用于动态创建对象的嵌套循环
- 正在创建具有动态键的对象
- 用Javascript创建一个动态选择对象
- 创建对象并将其附加到动态创建的对象
- 如何基于对象动态创建和链接到页面
- 使用 eval() JS 动态创建对象
- 使用动态键创建对象
- 如何在 QML 中发生相同事件后创建/销毁动态对象
- 在mootools或javascript中动态创建对象
- 创建具有动态属性的对象数组
- 如何在 JavaScript 中基于另一个对象动态创建属性和对象
- 如何在 javascript 中使用 Onclick 属性动态创建对象
- 流星动态创建对象并引用它们?有没有一种简单的方法可以做到这一点
- 使用控制器中对象的位置 x,y 创建一个动态网格或表格 - 引导程序,AngularJS
- Javascript对象:动态创建属性和属性名称
- 从字符串创建对象(动态)