gpt4 book ai didi

javascript - 将 Object.setPrototypeOf 与 instanceof 一起使用

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:17 24 4
gpt4 key购买 nike

我正在尝试使用 Object.setPrototypeOf 来重新设置已转换为 JSON 并返回为对象的对象的原型(prototype)。但是,instanceof 似乎没有按我预期的方式工作:

class Foo
{

}

Object.setPrototypeOf({ }, Foo) instanceof Foo; // Returns false

为什么会这样?据我所知,instanceof 的工作原理是将给定对象的原型(prototype)与引用的类进行比较。有没有其他方法可以做到这一点?

最佳答案

JS 类只是构造函数和原型(prototype)的语法糖。 Foo 是构造函数,而不是原型(prototype)...因此您需要使用 Foo.prototype 而不是 Foo:

Object.setPrototypeOf({ }, Foo.prototype)

但是,由于这个 warning on MDN,我不会为您的用例推荐这种方法:

Changing the [[Prototype]] of an object is, by the nature of how modern JavaScript engines optimize property accesses, a very slow operation

相反,使用 Object.create():

const obj = Object.create(Foo.prototype)

然后您可以使用 Object.assign() 复制数据(假设 data 是您解析的 JSON 数据):

Object.assign(obj, data)

或者,如果您的类有一个允许您通过参数设置其初始状态的构造函数,您可以只使用 new Foo(data),但上述方法更通用,因为它绕过了构造函数。

关于javascript - 将 Object.setPrototypeOf 与 instanceof 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49482459/

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