【问题标题】:Updated ThreeJS and now instanceof doesn't work?更新了 ThreeJS,现在 instanceof 不起作用?
【发布时间】:2018-12-18 05:31:03
【问题描述】:

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

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

当我简单地更新库时,可能出了什么问题/发生了变化?

【问题讨论】:

    标签: javascript three.js


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2023-02-03
      • 2011-03-09
      • 2016-10-10
      • 2021-10-02
      • 2015-09-28
      相关资源
      最近更新 更多