Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新了ThreeJS,现在instanceof donds';不行?_Javascript_Three.js - Fatal编程技术网

Javascript 更新了ThreeJS,现在instanceof donds';不行?

Javascript 更新了ThreeJS,现在instanceof donds';不行?,javascript,three.js,Javascript,Three.js,我更新到r99,现在我发现我正在做的任何检查都不再有效 例如,当我遍历这个对象并检查子对象是否为网格时,它返回为false。但是,如果我看一下child.constructor.name,它将报告为Mesh object.traverse(child => { console.log(child); if (child instanceof THREE.Mesh) { console.log('THREE.Mesh'); } else {

我更新到r99,现在我发现我正在做的任何检查都不再有效

例如,当我遍历这个对象并检查子对象是否为网格时,它返回为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('----');
}


当我简单地更新库时,可能会发生什么错误/更改?

不完全确定您正在遍历的
对象是如何创建的,但无法看到该代码,但您正在使用的加载程序可能更改了其方法

在检查类型时,我建议您使用内置的
.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

无法完全确定您正在遍历的
对象是如何创建的,但无法看到该代码,但您正在使用的加载程序可能更改了其方法

在检查类型时,我建议您使用内置的
.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