JS - 原型,prototype 和 __proto__

117 阅读1分钟

原型和原型链是JS实现继承的方式。
除了箭头函数,其它函数身上都有prototype属性。当该函数作为构造函数生成对象时,新生成的对象会继承其prototype中的方法(即 obj.__proto__ === fn.prototype)。

function Person() {

}
console.log(
  Person.__proto__ === Function.prototype,
  Object.__proto__ === Function.prototype,
  Function.__proto__ === Function.prototype,
)
// true true true

console.log(
  Function.prototype.__proto__ === Object.prototype,
  Object.prototype.__proto__ === null,
  Array.prototype.__proto__ === Object.prototype,
)
// true true true

Person, Object, Function 是函数,由 Function 构造而来。
Function.prototype,Array.prototype 是对象,由 Object 构造而来。
原型链的查找方法:xxx.prototype 是一个普通对象,yyy.__proto__ 找的是yyy的构造函数。