gpt4 book ai didi

javascript - 使用原型(prototype)而不是在对象本身上声明属性有什么好处吗?

转载 作者:数据小太阳 更新时间:2023-10-29 03:56:01 27 4
gpt4 key购买 nike

原型(prototype)用于声明一类对象的属性和方法。使用原型(prototype)的一个优点是它可以节省内存,因为类的所有实例都指向原型(prototype)的属性和方法,这样可以节省内存并有效地允许类的所有实例将属性视为静态。

原型(prototype)用于通过原型(prototype)链进行继承。

我的问题很简单。当你可以做的时候为什么还要使用原型(prototype):

function car() {
this.engine = "v8";
}
function mustang() {
// nm, no good way to inherit without using prototypes
}

是吗?所以原型(prototype)的主要目的有三个:

  1. 保存内存
  2. 提供静态属性
  3. 是引用类型从父类(super class)继承的唯一方式

最佳答案

conserve memory

是的,当您创建数百个 Car 实例并且它们都有自己的函数(具有自己的闭包范围)时,您将消耗更多内存。

找不到它的引用,但有人建议 Chrome 优化使用原型(prototype)的构造函数,而不是在构造函数主体中包含所有内容的构造函数。

provide static properties

静态更像是Date.now(),每个实例都有来自原型(prototype)的成员,但可以在实例上调用。

is the only way for a reference type to inherit from a super class

您可以在 Child 中使用 Parent.apply(this,arguments); 进行继承,但这会使扩展 Parent 函数更加复杂并且不会使 childInstance instanceof Parent 为真。该代码的作用是运行父代码,将要创建的子实例作为调用对象 (this)。继承通常在 2 个地方完成。

  1. 在 Child 主体中 Parent.apply(this,arguments); 重新使用 Parent 初始化代码并使 Parent 实例成员成为 Child 实例成员(例如:this.name)。<
  2. 将 Child.prototype 设置为 Parent.prototype 的浅拷贝 Child.prototype=Object.create(Parent.prototype);Child.prototype.constructor=Child; 这将确保共享的 Parent 成员是在 Child 实例上可用(如函数 getName)。

此处对这些要点进行了更详细的解释:https://stackoverflow.com/a/16063711/1641941

关于javascript - 使用原型(prototype)而不是在对象本身上声明属性有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11294623/

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