更新了ThreeJS,现在instanceof无法正常工作?

时间:2018-12-17 20:17:19

标签: javascript three.js

我更新到r99,现在发现我正在执行的所有检查实例都不再起作用。

例如,当我遍历此对象并检查子对象是否为Mesh时,它将返回为false。但是,如果我看一下child.constructor.name,它就是报告为Mesh。

object.traverse(child => {
    console.log(child);
    if (child instanceof THREE.Mesh) {
        console.log('THREE.Mesh');
    } else {
        console.log('NOT THREE.Mesh');
    }
    console.log(child.constructor.name);
    console.log('----');
}

enter image description here

当我简单地更新库时,什么地方可能出了错/更改?

1 个答案:

答案 0 :(得分:1)

不能完全确定如何遍历的object是在看不到该代码的情况下创建的,但是正在使用的加载程序有可能改变了其方法。

检查类型时,建议您使用内置的.type属性,这也是Three.js在内部用来区分其处理的对象类型的属性。使用instanceof的问题在于,在处理子类时,您可能会得到模棱两可的结果:

var myMesh = new THREE.Mesh();
console.log(myMesh instanceof THREE.Mesh);      // True
console.log(myMesh instanceof THREE.Object3D);  // Also true

但是,如果您检查.type属性,则可以更加确定所处理的内容。

console.log(myMesh.type === "Mesh");        // True
console.log(myMesh.type === "Object3D");    // False