JS继承(一)

忽然发现本身好久没写过什么东西了html

其实从博客更新的速度上就能够看出一我的近期有没有成长函数

对 …… 我没有成长url

也能够由此看出本身选择的企业是否是对的prototype

对 …… 我不会离职……指针

略略略 来咬我啊……htm

因而乎 我把本身之前其余博客发的文章放出来了 对象

欢迎骚扰 欢迎指点 小女子 不胜感激……blog

——————————————我是分割线————————————————继承

1.构造函数,实例原型链

构造函数是用来建立对象的函数 与其余函数的区别在于调用方式不一样
  • 若是经过new操做符来调用 就是构造函数
  • 若是没有经过new操做符来调用的就是普通函数
JS中的继承(一)
 
在var person1 = new person()中 经过new操做符 调用了函数person 并生成了person1
这里的person就成为构造函数 person1称为person函数对象的一个实例 
其实能够经过实例的constructor 访问对应的构造函数 (可是其实constructor并非实例的属性)
 
JS中的继承(一)
 
2.原型对象
咱们建立一个函数的时候 函数对象都会有一个prototype属性 这个属性是一个指针
指向他的原型对象 原型对象的本质也是一个对象
举个栗子:
JS中的继承(一)
JS中的继承(一)

3.构造函数 原型对象和实例的关系
JS中的继承(一)

由图能够看出
  • 函数对象的prototype指向原型对象 原型对象的constructor指向函数对象
  • 实例对象的prototype属性指向原型对象,这里的perototype是内部属性 是不容许访问的
  • 这个属性的做用:容许实例经过该属性访问原型对象中的属性和方法
JS中的继承(一)

解释:console.log(person1.constructor)时说到能够经过实例的constructor访问构造函数
可是constructor本质上是原型对象的属性
 
4.继承
原型链:继承的主要思路就事利用原型链 
      让一个引用类型继承另外一个引用类型的属性和方法
  • 原型对象经过contructor属性指向构造函数
  • 实例经过prototype属性指向原型对象
JS中的继承(一)
 
原理上图
JS中的继承(一)
  • 首先咱们建立了A和B 两个函数对象 同时也生成了他们的原型对象
  • 接着 给A的原型对象添加了sayA()方法
  • 而后是关键的一部B.prototype = new A();让函数对象B的prototype指针指向了一个A的实例
这也就是为何最后B的原型对象里面不在有constructor属性 
(其实B原本有一个真正的原型对象 本来能够经过B.prototype访问 可是咱们如今改写了这个指针
使他指向了另外一个对象,因此B真正的原型对象如今无法被访问了 取而代之的这个新的原型对象是
A的一个实例 因此没有了constructor属性了)
  • 接下来给这个B.prototype指向的对象增长一个sayB方法
  • 而后生成了一个实例b1
  • 最后调用了b1的sayB方法 能够执行
由于b1有prorotype属性能够访问B.prototype里的方法
  • 调用了b1的sayA方法 能够执行
由于b1沿着prototype属性能够访问B.prototype ,B.prototype能够继续沿着prototype属性访问 A.prototype,最终在A.prototype上找到 了sayA方法 因此能够执行
 
因此如今的结果就至关于 b1继承了A的属性和方法 这种由prototype不断把实例和原型对象联系起来的结构就是原型链 也是js中 继承主要的实现方式
 
该篇文章参考思否! 主要方便本身记忆的同时 传播 好的内容 !但愿对你们有所帮助!
相关文章
相关标签/搜索