JavaScrip 中的 prototype 和 __proto__

如果你是 JavaScript 开发人员,你可能遇到过“原型”这个词。但是你遇到过“_proto_”吗?如果是,有没有想过它们有什么区别?如果没有,让我来告诉你。

prototype

它是一个包含某些属性和方法的对象,默认情况下,JS 会自动将其与 JavaScript 代码中创建的对象(请记住,函数、日期、数组等都被视为对象)相关联。

原型就像构造函数(创建新对象的函数)的蓝图,其中包含所有实例(该类构造函数生成的对象)应继承的所有功能。

简而言之,它是一个包含类构造函数的各种属性和方法的主蓝图,并且从该构造函数创建的每个对象都将继承这些属性和方法。

现在的问题是,如何访问该对象(由构造函数创建)继承的那些方法和属性?是的!通过“__proto__”对象。

__proto__

它是一个指向其创建原型的对象。因此,“proto”现在是该特定对象的原型。

例如,如果你使用新的 Array 构造函数创建一个数组,则该数组的 __proto__ 将指向 Array 构造函数的原型,并且由于数组在 JS 中也被视为对象,因此 Array 构造函数的 __proto__ 将指向 Object 构造函数的原型。Object 构造函数的原型是主蓝图,其原型不指向某个地方(将返回 null