在 ES6 和 ES7 中使用 Object.create() 方法来创建对象

在 JavaScript 中,创建对象是一项基本任务。一般来说,可以使用字面量对象 ({}) 或构造函数 (例如 new Object()) 来创建对象。但是,这些方法都有其限制,而使用 Object.create() 方法可以解决一些常见问题。

Object.create() 方法定义

Object.create() 方法是 ECMAScript 5 (ES5) 引入的新方法,它允许使用一个指定的原型对象和属性创建一个新的对象。

Object.create(proto[, propertiesObject]);

其中:

  • proto:新创建对象的原型对象。
  • propertiesObject:可选参数,为新创建对象扩展属性和方法的对象。

Object.create() 方法的优势

与基于字面量的对象和构造函数的对象比较,Object.create() 方法有以下一些优势:

  1. 更好地控制对象的原型

使用字面量对象或构造函数对象创建的新对象将始终使用 Object.prototype 作为其原型。而使用 Object.create() 方法,可以为新对象明确指定原型对象。

  1. 更好地控制对象的属性和方法

使用 Object.create() 方法,可以使用 propertiesObject 参数为新对象扩展属性和方法。这些属性和方法将成为新对象的自身属性和方法,而不是原型对象的属性和方法。

  1. 更清晰地定义继承链

使用 Object.create() 方法创建对象时,可以明确指定原型对象,并在原型对象中指定其父对象的原型对象。这将使得继承链更加清晰明了。

Object.create() 的示例

下面的代码演示了如何使用 Object.create() 方法来创建一个新对象并为其添加属性和方法:

----- ------ - -
  --------- -
    --------------- ---- -- ----------------
  -
--

----- ---- - --------------------- -
  ----- -
    ------ -------
    --------- -----
    ----------- -----
    ------------- ----
  -
---

--------------- -- --- ---- -- ------

在这个例子中,首先创建了一个名为 person 的对象,它有一个名为 sayName 的方法。然后,使用 Object.create() 方法创建了一个名为 john 的对象,并将 person 对象作为其原型对象。在 propertiesObject 参数中,指定了 john 的 name 属性,并设置其值为 "John"。

最后,调用 john 对象的 sayName() 方法,会在控制台输出 "My name is John."。

ES6 和 ES7 中的 Object.create() 应用

在 ES6 和 ES7 中,可以在类(class)中使用 Object.create() 方法来创建对象。下面的代码演示了如何在类中使用 Object.create():

----- ------ -
  ----------------- -
    --------- - -----
  -

  --------- -
    --------------- ---- -- ----------------
  -
-

----- ---- ------- ------ -
  ----------------- -
    ------------
  -

  ---------- -
    ------------------- ---------
  -
-

----- ---- - ------------------------------
--------- - -------
--------------- -- --- ---- -- ------
---------------- -- ------- -------

在这个例子中,使用 ES6 中的类语法定义了两个类:Person 和 John。Person 类有一个 name 属性和一个 sayName() 方法。John 类继承自 Person 类,并有一个 sayHello() 方法。

然后,使用 Object.create() 方法来创建一个名为 john 的新对象,并将其原型对象设置为 John.prototype。使用 john 对象的 name 属性并调用 sayName() 和 sayHello() 方法,将输出 "My name is John." 和 "Hello, world!"。

结论

Object.create() 方法是一种创建对象的强大工具,它可以更好地控制对象的原型、属性和方法,并使继承链更加清晰明了。在 ES6 和 ES7 中,它可以与类语法结合使用创建出更为强大的对象。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6706443ed91dce0dc85ad5ca