本文记录于 2017-2019 年早期前端探索时期,保留当时的真实成长轨迹与思考,归档作技术演进参考。

JavaScript 原型链

function Person(name){
  this.name = name
}
 
Person.prototype.say = 'fuck prototype'
 
var one = new Person('小三')
var two = new Person('小吴')
 
one.name
one.say
two.name
two.say

看图可知

one.__proto__ === Person.prototype
Person.prototype.__proto__ === Object.prototype
 
Person.__proto__ === Function.prototype
Function.__proto__ === Function.prototype
Object.__proto__ === Function.prototype
 
Function.prototype.__proto__ === Object.prototype
 
Object.prototype.__proto__ === null

总结

  • 当 new 一个函数的时候会创建一个对象,被创建对象.__proto__ === 函数.prototype
  • 一切函数都是由 Function 这个函数创建的,被创建函数.__proto__ === Function.prototype
  • 一切函数的原型对象都是由 Object 这个函数创建的,Object.prototype === 一切函数.prototype.__proto__