gpt4 book ai didi

javascript - Node vs Chrome,instanceof 的实现,多个文件

转载 作者:行者123 更新时间:2023-11-30 16:51:03 25 4
gpt4 key购买 nike

我有这种奇怪的行为,希望你能帮助我。 =)

我有一个设置,我需要使用 Mocha 运行 JavaScript 测试。代码由 TypeScript 生成,测试通过 browserifycommonjs 在浏览器和 nodejs 中运行模块。问题是我想使用 instanceof,但显然行为会有所不同,具体取决于代码是在 Node 还是在 Chrome 中运行。示例如下。

// file Actions.ts
Class Action {..}
Class ViewAction extends Action {..}
Class MyViewAction extends ViewAction {..}

// file App.ts
var action = new MyViewAction();

// file App.ts or Elsewhere.ts
foo(action) {
var testA = action instanceof MyViewAction;
var testB = (<any>action.constructor).name === "MyViewAction";
}

问题是,如果 foo 在不同的 commonjs 模块中被调用,testA 如果在 Node 中运行则变为 false 但如果在 Chrome 中运行则为 true,而testB 在这两种情况下都是 true

如果 foo 在与分配给 action 的同一文件中运行,则代码会一致地工作。

任何人都可以复制这个错误,或者解释我做错了什么吗?

干杯

最佳答案

var action = MyViewAction();

您需要使用 new 调用它,即 new MyViewAction 但我怀疑您已经在这样做了。

testA becomes false if run in Node but true if run in Chrome

我怀疑您定义了两个 MyViewAction 函数。

  • 在 Chrome 中,由于全局命名空间,最后一个获胜并且通过引用比较(这是 instanceof 所做的)与 MyViewAction 指向相同的函数.

  • 在 Node 中,每个文件都是自己的模块,没有全局命名空间冲突,因此您有两个 MyViewAction 函数,ref 比较返回 false,但由于它们的名称相同 .name 字符串相同。

关于javascript - Node vs Chrome,instanceof 的实现,多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30524350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com