原型

原型

原型的本质:对象

  1. 所有的函数都有原型属性prototype
  2. 默认情况下,prototype是一个对象
  3. prototype中默认包含一个属性:constructor,该属性指向函数对象本身。

隐式原型

  1. 所有对象都有一个隐式原型属性__proto__
  2. 隐式原型是一个对象,指向创建该对象的构造函数的原型对象。
  3. 在查找对象成员时,如果在对象身上没有找到,就会去对象的隐式原型中查找。

所有函数的隐式原型都指向Function的原型

所有对象的隐式原型都指向Object的原型

总结

原型对象,实例对象,构造函数之间的关系如图所示:

特殊情况

Function的原型指向Function的隐式原型,即Function.prototype===Function.__proto__

Object原型的隐式原型指向null.Object.prototype.__proto__ ===null

Tips

  1. Object.__proto__ ===Function.prototype:可以理解为Object这个函数(对象)是由Function函数实例化的的,所以就指向Function函数的原型对象。
  2. Function.prototype.__proto__ ===Object.prototype:可以理解为Function.prototype是一个对象,对而任何对象的隐式原型都指向Object函数的原型对象。

最后,关于Function,Object,自定义构造函数,实例对象的图解

注释如下:

自定义对象.__proto__ ===自定义构造函数.prototype
自定义构造函数.prototype.__proto__ ===Object.prototype
Object.prototype.__proto__ ===null
自定义构造函数.__proto__ ===Function.prototype
Function.__proto__===Function.prototype
Function.prototype.__proto__ ===Object.prototype
Object.__proto__ === Function.prototype

我的理解

原型链

  1. 由于原型prototype本身是对象,因此,它也有隐式原型,指向的规则不变;这样一来,从某个对象出发,依次寻找隐式原型的指向,将形成一个链条,该链条叫做原型链。
  2. 在查找对象成员时,若对象本身没有该成员,则会到原型链中查找。

  转载请注明: TomoFur 原型

 上一篇
axios学习笔记 axios学习笔记
axios:一个基于promise的ajax类库 引入axios.js这个文件之后,向外暴露了一个对象axios 发送get请求axios.get(url,{params:{}}).then(res=>{}).catch(mse=>{})/
2019-05-23
下一篇 
JavaScript学习过程中遇到的经典算法题 JavaScript学习过程中遇到的经典算法题
说明:这个帖子旨在记录在学习JavaScript期间遇到的一些有趣的编程题。 平衡括号题目描述:在编写代码并且编译时,难免会因为少写了一个’)’和被编译器报错。也就是说,编译器会去匹配括号是否匹配。当你输入了一个’(‘,很自然编译器回去检查
2019-05-05
  目录