JavaScript为什么操作proto慢?

JavaScript为什么操作proto慢?,javascript,prototype,Javascript,Prototype,关于这个线程:,我想知道为什么变异实例的\uuuuu proto\uuuu是一个缓慢的操作 我知道它已经过时了,我经常在网上读到它。但我一直没有找到原因。为什么它真的不受欢迎,为什么它速度慢 就性能而言,setPrototypeOf()是否是更好的解决方案 我想知道为什么变异实例的proto是一个缓慢的操作 在你的浏览器中实现JavaScript语言的人做出了一个权衡:他们想支持这个“深奥”的特性,但通过降低操作速度,使语言的其余部分变得更快 在编写程序后,您只需担心\uuuuuu proto\

关于这个线程:,我想知道为什么变异实例的
\uuuuu proto\uuuu
是一个缓慢的操作

我知道它已经过时了,我经常在网上读到它。但我一直没有找到原因。为什么它真的不受欢迎,为什么它速度慢

就性能而言,
setPrototypeOf()是否是更好的解决方案

我想知道为什么变异实例的proto是一个缓慢的操作

在你的浏览器中实现JavaScript语言的人做出了一个权衡:他们想支持这个“深奥”的特性,但通过降低操作速度,使语言的其余部分变得更快


在编写程序后,您只需担心
\uuuuuu proto\uuuuu
的速度。对于许多用例,额外的“慢度”只会在整个程序中产生几毫秒的差异,没有人会在意。

它实际上不再被弃用了,因为兼容原因,它在ES6中重新引入。通常应该避免这种情况。假设你有一只
动物
是一只动物。
\uuuuu proto\uuuuu
允许您声明“这条狗不再是动物”,这完全打破了面向对象的设计。它有一些有用的例子(比如说有些东西“不再是节点列表,而是像Zepto那样的数组”)但这些都是罕见的,在我看来通常是不合理的。下面是语言创建者和Mozilla CTO Brendan Eich对它的反驳,好吧,但我仍然想知道为什么它被说成是慢的。;)虽然我很理解它破坏了OO设计。但是如果我的“对象”是一个函数(如相关线程中所述),如果我不想修改
函数。prototype
。谢谢!您能创建“类”吗“要一次性工作,像这样。bundle.name而不是this.name?这样,您就可以将捆绑包作为普通对象保留,并随时交换实现,而不会破坏运行时优化。只要所有可互换的方法都知道并使用“.bundle.”,它几乎和聚合类型“hotswap”一样方便,但没有成本。
[…]但是通过降低操作速度,使语言的其余部分更快。
:你到底是什么意思?:好吧,但我仍然想知道“为什么/如何”的算法是缓慢的。谢谢你的回答。我不知道具体情况。想象一下,如果语言将
\uuuuu proto\uuuuu
复制到每个对象,那么它将以超快的速度访问。如果更改
\uuuu proto\uuuuu
,速度会很慢,因为它需要更新每个对象。(我不认为他们是这么做的,但这就是语言所做的权衡。)我明白了。事实上,他们试图阻止手动设置
\uuuuu proto\uuuuu
,因为人们可以对其进行任何设置,从而打破整个原型原理。好的,谢谢你的帮助。:)因此,只有在绝对没有其他选择的情况下,我们才可以修改它。