原型和原型对象到底指的是什么?它们是一样的吗?

原型和原型对象到底指的是什么?

看到一些描述里,又有原型一词,又有原型对象一词(可以查看我的另一个问题,就同时遇到了这两个词)。

  • 这两者分别是指谁?还是一样的意思呢?
  • 是函数里面经常提到的prototype还是在原型链中经常提到的[[Prototype]]
  • 还是没有明确的规定只是个人的随意起了名字?

今天在看babel的文档时又遇到了原型对象一词,根据上下文看,这里的原型对象说的应该是prototype而不是[[Prototype]]
image.png

顺便说一下这里的翻译:

  • 内置对象改为内置函数更合适一吧。当然函数也是个对象。
  • 添加对象应该是添加属性

英文原文
image.png

阅读 943
avatarAI BotBETA

原型(Prototype)和原型对象(Prototype Object)是两个不同的概念

  1. 原型(Prototype)
* 原型是JavaScript中的一个核心概念。每个函数都有一个prototype属性,当这个函数被用作构造函数(即通过new关键字)来创建实例时,新创建的实例会从构造函数的prototype属性所指向的对象继承属性。
* 例如,如果你有一个构造函数`Person`,那么`Person.prototype`就是这个构造函数所创建的实例继承属性的来源。
  1. 原型对象(Prototype Object)
* 原型对象通常是指用作构造函数的prototype属性的那个对象。在JavaScript中,所有的函数都有一个prototype属性,这个属性的值是一个对象,这个对象就是原型对象。
* 当一个函数被用作构造函数时,新创建的实例会从构造函数的prototype属性(即原型对象)所指向的对象继承属性。

总结

  • 原型和原型对象不是同一个概念。原型是一个更广泛的概念,可以指代任何对象的原型链,而原型对象通常特指用作构造函数的prototype属性的那个对象。
  • 在JavaScript中,所有的函数都有一个prototype属性,这个属性的值就是该函数的原型对象。所以,当我们说“原型对象”时,我们通常是指这个prototype属性的值。
  • 当一个函数被用作构造函数来创建实例时,新创建的实例会从构造函数的prototype属性(即原型对象)所指向的对象继承属性。这种继承方式是通过原型链实现的,其中原型对象在原型链中处于下一级。
3 个回答

对象的原型是一个原型对象。

看 ecma262 的用法,大概是,对象有原型 (object t's prototype);类型有原型对象 (Function prototype object, String prototype object, 还有 Object prototype object, 等等)。

t=new T; ,t 的原型是 T 原型对象。


ecma262 里,对 prototype 有一句说明:

Every object created by a constructor has an implicit reference (called the object's prototype) to the value of its constructor's "prototype" property.

对所谓 prototype object 是没有定义的,只是一个习惯叫法。(但是对 Object prototype object, Function prototype object 等具体对象是有定义的。)感觉大概就是构造函数的 prototype 属性里的那个 object 叫 prototype object 。

看你引文的用法,跟 ecms262 是不一致的。但是了解 js 的继承机制的话,基本也可以明白是怎么回事,不会对理解带来什么障碍。


英文就已经乱了的话,中文就更不好统一了。

可以看下这篇文章:一文搞懂原型和原型链
原型分两个,一个是显示原型prototype,一个是隐式原型__proto__,在属性中可以看到
显示原型你可以把它看成一个对象,你可以在原型上添加新的属性
隐式原型不可操作,在现在的谷歌浏览器上显示为[[Prototype]]
普通对象的隐式原型__proto__等于构造函数的显示原型prototype
它们之间的关系

__proto__ === prototype 
prototype == {}
{}.__proto__ == Object.prototype
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏