首页 > web前端 > js教程 > 正文

Object.create 与 new:何时使用 JavaScript 继承?

Barbara Streisand
发布: 2024-11-15 12:06:03
原创
1001 人浏览过

Object.create vs. new: When to Use Which for JavaScript Inheritance?

JavaScript 继承:Object.create 与 new

在 JavaScript 中,可以通过各种方法来实现继承。两种常见讨论的方法是使用 new 关键字和 Object.create。在探索继承时,可用选项的数量可能令人望而生畏。

为了阐明在 JavaScript 中实现继承的最受接受的方法,让我们探讨一下 Object.create 和 new 之间的差异。

Object.create

Object.create 用于创建继承另一个对象的新对象。它不会调用父对象的构造函数。当您只想创建一个从父对象继承特定属性和方法的新对象时,这非常有用。

const baseModel = {
  property1: "value1",
  method1: function() {}
};

const newModel = Object.create(baseModel);
登录后复制

在此示例中,newModel 从 baseModel 继承了 property1 和 method1。

new

new 关键字调用类或对象的构造函数并创建该类的新实例或对象。它调用构造函数,从而使用特定属性和方法初始化新对象。

class BaseModel {
  constructor(property1) {
    this.property1 = property1;
  }

  method1() {}
}

const newModel = new BaseModel("value1");
登录后复制

在此示例中,newModel 是 BaseModel 类的实例,其中 property1 初始化为“value1”。

选择正确的方法

Object.create 和 new 之间的选择取决于是否需要创建一个继承属性和方法的新对象,或者调用父对象的构造函数。

  • 当您只想创建一个继承另一个对象的对象而不需要使用 Object.create 时,请使用 Object.create调用构造函数。
  • 当您需要创建类或对象的实例并调用其构造函数时,请使用 new。

在给定的情况下在这种情况下,您希望拥有一个可以使用 RestModel 或 LocalStorageModel 进行扩展的基本对象模型。使用 Object.create (或其垫片)是正确的方法,因为您不想创建 Model 的新实例并调用其构造函数。

RestModel.prototype = Object.create(Model.prototype);
登录后复制

如果您想在 RestModels 上调用 Model 构造函数,使用 call() 或 apply() 代替:

function RestModel() {
    Model.call(this); // apply Model's constructor on the new object
    ...
}
登录后复制

以上是Object.create 与 new:何时使用 JavaScript 继承?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板