动态修改原型链对性能的影响?

发布于 2022-09-05 21:42:58 字数 502 浏览 18 评论 0

每次启动内存数据库时,需要把上万个JSON.parse得到的对象变为没有继承的对象。现在有两种做法:


obj =  Object.assign(Object.create(null),obj);

if(Object.prototype.hasOwnProperty.call(obj,'__proto__')){
    tmp = obj.__proto__;
    delete obj.__proto__;
    obj.__proto__ = null;
    obj.__proto__ = tmp;
}
else{
    obj.__proto__=null;
    delete obj.__proto__;
}

比较点有两个:

  1. 初始化耗时?(例中Object的方法实际使用时都会提前赋值给变量,重复调用,这里只是看上去直观一些)

  2. 对后续性能的影响?(例如字典模式与隐藏类模式的差异等)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初雪 2022-09-12 21:42:58

这是在探讨v8引擎启动时候需要的么?
那时候的对象还不能叫对象。
在v8内部实现时候,不需要原型继承的对象肯定用了其他构造函数加快速度。
不然把每个实例都加那些特有方法会很慢。虽然只是链了一个对象到原型链上。
如果是自己使用。
浏览器里面几乎碰不到需要把对象的原型链断掉的情况。如果你想覆写自带原型上的方法。可以自创一个类。把这个类(用class也可以,用构造函数也可以)的prototype设置为null就可以new出没有原型方法的对象了。
当然这和Object.creat没有区别。也和a.__protp__=null没有区别。
但,这是一个构造函数。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文