首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Object.create相对于构造函数的实际优势是什么?

Object.create相对于构造函数的实际优势是什么?
EN

Stack Overflow用户
提问于 2019-01-12 11:16:43
回答 1查看 291关注 0票数 0

因此,我来自古典的OOP语言,并试图围绕javascript原型风格。

试图理解函数构造函数模式与Object.create模式之间的区别:

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

函数构造器I可以创建私有函数和方法如下:

代码语言:javascript
复制
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 I only

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

但那又怎样?直接将子模型设置为人工构造函数的实际优点是什么?

实际使用的例子会有帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-12 11:23:53

调用构造函数:

代码语言:javascript
复制
 const child = new Human();

(几乎)与:

代码语言:javascript
复制
 const child = Object.create(Human.prototype);
 Human.call(child);

因此,我不认为Object.create是一种语言特性,而是理解JS中原型继承的一种方式。

对于没有构造函数的原型链,有非常有限的用途。一个例子是Human的反序列化。

代码语言:javascript
复制
 const serialized = JSON.stringify(child); // Human inheritance gets lost, its a plain object now

 const child2 = Object.assign(Object.create(Human.prototype), JSON.parse(serialized));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54159066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档