gpt4 book ai didi

javascript - Object.create 相对于构造函数有什么实际优势?

转载 作者:行者123 更新时间:2023-12-03 00:24:21 25 4
gpt4 key购买 nike

所以我来自经典的 OOP 语言,并试图理解 javascript 原型(prototype)风格。

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

  1. 范围:私有(private)和特权方法
  2. 何时在应用程序中使用 which

函数构造函数我可以创建私有(private)函数和方法,如下所示:

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

Object.create 我只能:

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

但那又怎样呢?与构造函数相比,直接设置子级原型(prototype)为人类有哪些实际优势?

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

最佳答案

调用构造函数:

 const child = new Human();

(几乎)与:

 const child = Object.create(Human.prototype);
Human.call(child);

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

没有构造函数的原型(prototype)链的用例非常有限。一个例子是 Human 的反序列化:

 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));

关于javascript - Object.create 相对于构造函数有什么实际优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54159066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com