原型(Prototype)和原型对象(Prototype Object)是两个不同的概念。
- 原型(Prototype):
* 原型是JavaScript中的一个核心概念。每个函数都有一个prototype属性,当这个函数被用作构造函数(即通过new关键字)来创建实例时,新创建的实例会从构造函数的prototype属性所指向的对象继承属性。
* 例如,如果你有一个构造函数`Person`,那么`Person.prototype`就是这个构造函数所创建的实例继承属性的来源。
- 原型对象(Prototype Object):
* 原型对象通常是指用作构造函数的prototype属性的那个对象。在JavaScript中,所有的函数都有一个prototype属性,这个属性的值是一个对象,这个对象就是原型对象。
* 当一个函数被用作构造函数时,新创建的实例会从构造函数的prototype属性(即原型对象)所指向的对象继承属性。
总结:
- 原型和原型对象不是同一个概念。原型是一个更广泛的概念,可以指代任何对象的原型链,而原型对象通常特指用作构造函数的prototype属性的那个对象。
- 在JavaScript中,所有的函数都有一个prototype属性,这个属性的值就是该函数的原型对象。所以,当我们说“原型对象”时,我们通常是指这个prototype属性的值。
- 当一个函数被用作构造函数来创建实例时,新创建的实例会从构造函数的prototype属性(即原型对象)所指向的对象继承属性。这种继承方式是通过原型链实现的,其中原型对象在原型链中处于下一级。
对象的原型是一个原型对象。
看 ecma262 的用法,大概是,对象有原型 (object t's prototype);类型有原型对象 (Function prototype object, String prototype object, 还有 Object prototype object, 等等)。
t=new T; ,t 的原型是 T 原型对象。
在 ecma262 里,对 prototype 有一句说明:
对所谓 prototype object 是没有定义的,只是一个习惯叫法。(但是对 Object prototype object, Function prototype object 等具体对象是有定义的。)感觉大概就是构造函数的 prototype 属性里的那个 object 叫 prototype object 。
看你引文的用法,跟 ecms262 是不一致的。但是了解 js 的继承机制的话,基本也可以明白是怎么回事,不会对理解带来什么障碍。
英文就已经乱了的话,中文就更不好统一了。