对于使用过基于类的语言 (如 Java 或 C++) 的开发人员来说,JavaScript 有点令人困惑,因为它是动态的,并且本身不提供一个 class
实现。(在 ES2015/ES6 中引入了 class
关键字,但那只是语法糖,JavaScript 仍然是基于原型的)。
每个实例对象( object )都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype )。
所有引用类型(函数,数组,对象)都拥有__proto__属性(隐式原型)。
所有函数拥有prototype属性(显式原型)(仅限函数)。
原型对象:拥有prototype属性的对象,在定义函数时就被创建。