在 JavaScript 中,创建对象是一项基本任务。一般来说,可以使用字面量对象 ({}) 或构造函数 (例如 new Object()) 来创建对象。但是,这些方法都有其限制,而使用 Object.create() 方法可以解决一些常见问题。
Object.create() 方法定义
Object.create() 方法是 ECMAScript 5 (ES5) 引入的新方法,它允许使用一个指定的原型对象和属性创建一个新的对象。
Object.create(proto[, propertiesObject]);
其中:
- proto:新创建对象的原型对象。
- propertiesObject:可选参数,为新创建对象扩展属性和方法的对象。
Object.create() 方法的优势
与基于字面量的对象和构造函数的对象比较,Object.create() 方法有以下一些优势:
- 更好地控制对象的原型
使用字面量对象或构造函数对象创建的新对象将始终使用 Object.prototype 作为其原型。而使用 Object.create() 方法,可以为新对象明确指定原型对象。
- 更好地控制对象的属性和方法
使用 Object.create() 方法,可以使用 propertiesObject 参数为新对象扩展属性和方法。这些属性和方法将成为新对象的自身属性和方法,而不是原型对象的属性和方法。
- 更清晰地定义继承链
使用 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