首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当值实际上是实例时,instanceof返回false。

当值实际上是实例时,instanceof返回false。
EN

Stack Overflow用户
提问于 2022-09-12 16:56:43
回答 1查看 59关注 0票数 1

是否有一种方法来检查正在使用的实例?

我正在将此记录到控制台:

代码语言:javascript
复制
import { OrthographicCamera } from 'three';

// Later in the file:

console.log(camera instanceof OrthographicCamera, camera);

它输出false,但是当我将camera的值记录到控制台时,我得到如下结果:

我不知道为什么它显示的相机不是一个实例,那么是否有办法获得更多的信息,它究竟在看什么?

这里是创建照相机的地方:

代码语言:javascript
复制
export function Camera(options?: CameraOptions) {
  return function (target: new () => object) {
    return class GameCamera extends target {
      readonly camera!: Camera;  
      constructor() {
        super();
        const dim = this.cameraDimensions();

        // create the Three camera
        this.camera = new OrthographicCamera(dim.left, dim.right, dim.top, dim.bottom, options?.near ?? 0, options?.far ?? 100);
      }
    }
  }
}}

摄像机在装饰器中创建并添加到gameObjects数组中。然后,当我得到activeCamera时,它是对上面扩展target的装饰器的引用。

这里是我进行instanceof查找的地方:

代码语言:javascript
复制
@Injectable({ providedIn: 'root' })
export class Camera {
  get activeCamera() {
    return Engine.activeCamera;
  }

  mouseToWorldPoint(mousePoint: Vector3) {
    if (this.activeCamera) {
      // Here is the check:
      console.log(camera instanceof OrthographicCamera, camera);
    }
  }
}

我就是这样得到相机的:

代码语言:javascript
复制
export class Engine {
  static gameObjects: GameObject[] = [];
  static get activeCamera() {
    return this.gameObjects.find(i => i.gameObjectType === 'camera' && i.isActive === true) as GameCamera | undefined;
  };
}

我已经将这个项目分解成多个npm工作空间:

代码语言:javascript
复制
{
  "name": "game-engine",
  "version": "1.0.0",
  "scripts": {
    "start": "npm run start --workspace=test"
  },
  "workspaces": [
    "test",
    "packages/core",
    "packages/common",
    "packages/input",
    "packages/objects"
  ]
}

两个工作空间从三个模块中获取信息。

  • GameCamerapackages/objects模块的一部分(创建packages/objects Camerapackages/common模块的一部分(例如检查)。

注意:这样工作了一段时间,似乎已经开始发生了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-14 23:34:01

为了解决我的问题,我所做的是在packages/core包中添加了一个导出以导出三个

index.ts (@engine/core)

代码语言:javascript
复制
import * as Three from 'three';
export { Three };

然后,当我需要在另一个包中使用三个just时,我只需要使用核心中的一个,如下所示:

@engine/objects/something.ts

代码语言:javascript
复制
import { Three } from '@engine/core';

export class CreateObject {
  constructor(){
    this.obj = new Three.Object3D();
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73692715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档