Javascript 更新了ThreeJS,现在instanceof donds';不行?
我更新到r99,现在我发现我正在做的任何检查都不再有效 例如,当我遍历这个对象并检查子对象是否为网格时,它返回为false。但是,如果我看一下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 {
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