与构造函数相比,Object.create的实际优势是什么?

时间:2019-01-12 11:16:43

标签: javascript oop inheritance prototype prototypal-inheritance

所以我来自经典的OOP语言,并试图用JavaScript原型风格来解决问题。

试图了解函数构造器模式和Object.create模式之间的区别:

  1. 范围:私有和特权方法
  2. 何时在应用程序中使用哪个

函数构造函数,我可以按如下方式创建私有函数和方法:

function Human() {
  this.public = "public accessible variable";
  let private = "private only accessible inside Human";
}
Human.prototype.speak = "hahahaha";

var child = new Human();
Console.log(child.public) // prints
console.log(child.private) // don't print 

优点:

  1. 函数构造函数模式允许创建公共和私有 方法。
  2. 我可以访问Human.prototype属性。
    • 子对象是指人类原型__proto__-> [[prototype]] (?)

Object.create我只能

  1. 创建一个对象并将其原型(即__proto__设置为Human) 对象(而不是人类的原型)

那又如何呢?相对于构造函数,直接将孩子的原型设置为人类的实用有什么优势?

实际用途的示例会有所帮助!

1 个答案:

答案 0 :(得分:1)

调用构造函数:

myDate = moment(someDate).format('MM/DD/YYYY HH:mm');

(几乎)与:

 const child = new Human();

因此,我不会将 const child = Object.create(Human.prototype); Human.call(child); 视为语言功能,而是将其视为理解JS中原型继承的一种方式。

没有构造函数的原型链的用例非常有限。一个示例是Object.create的反序列化:

Human