《JS原型》

117 阅读1分钟

JS原型

JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。

基本知识

  • 所有对象都有原型,原型也是一个对象,原型对象里存着以它为原型的对象的共有属性,即原型是这些对象的共有属性组成的对象,是对象的根。
  • 所有对象都有一个隐藏属性(_ proto _),这个隐藏属性都存着一个地址,指向这个对象的原型(prototype)。

构造函数

  • 可以构造出对象的函数叫构造函数。
  • 每个函数都有prototype属性,每个prototype都有constructor属性。
  • 如果一个对象不是函数,那么这个对象一般来说没有prototype 属性。
  • 所有函数对象的构造函数都是Function。
  • 构造函数new X()总共做了四件事:
    • 自动创建空对象。
    • 自动为空对象关联原型,原型地址指定为X.prototype。
    • 自动将空对象作为this关键字运行构造函数。
    • 自动return this。

总结

JS公式:对象. __ proto__ === 其构造函数.prototype

根公理:Object.prototype是所有对象的(直接或间接)原型 Object.prototype.__proto===null

函数公理: 所有函数都是由Function构造的

任何函数.__ proto__ === Function.prototype 任何函数有Object/Array/Function