JS原型继承与对象机制

JS原型继承的原理

  1. 假设让classB继承classA
  2. 让classB的prototype(含有三个值,自定义属性方法,constructor,__proto__)
  3. 目标:
    1. classB拥有classA的属性方法,classB可以有自己的额外属性
    2. classB的父级是A
    3. class B的构造器是自己的
  4. 过程:属性/父级/构造器
    1. classB自己写属性,在classB中通过classA.call(this)//自定义属性并使用A的属性
    2. classB的prototype=classA//继承classA的__proto__,属性方法
    3. classB.prototype.constructor=classB//修改构造器

首先 :自定义对象原型__proto__(Object)中有两个部分

  1. 自带第二层__proto__(Object)这里拥有Object通用属性与方法
  2. 自带的constructor构造器,实际是一个对象,拥有prototype属性,属性值为

    1. 每个对象都具有一个名为__proto__的属性;
    2. 每个构造函数(构造函数标准为大写开头,如Function(),Object()等等JS中自带的构造函数,以及自己创建的)都具有一个名为prototype的方法(注意:既然是方法,那么就是一个对象(JS中函数同样是对象),所以prototype同样带有__proto__属性);
    3. 每个对象的__proto__属性指向自身构造函数的prototype;
    1. prototype是构造函数独有的属性;
    2. 对象的__proto__属性通常与其构造函数的prototype属性相互对应;
    3. 所有构造函数的的prototype方法的__都指向__Object.prototype(除了…Object.prototype自身)

其次:prototype来自于constructor

  1. constructor指明了构造函数

自定义对象有两部分

  1. 自带属性
    • 自定义的方法与属性
  2. __proto__(指向constructor)
    • constructor(负责创建实例的初始化工作)
      • name
      • prototype
    • 自定义的属性方法
    • __proto__

原型继承classA修改了classB对象构造器的prototype

  • 修改prototype的同时 __proto__指向classA构造器的prototype
  • 此时class B的构造器中全部与class A相同,只需要修改classB的构造器等于classB对象就可以

对象的构造器在原型中

  • 修改构造器就要在原型中修改

prototype中有三部分

  • 自定义属性与方法
  • constructor
  • __proto__

对象没有构造器 类有构造器

区别在于 对象有属性方法,__proto__
类有属性方法,constructor,__proto__
  • 修改prototype指的是修改原型链上最近一层的prototype
  • 让prototype=new obj使最近一层prototype具有obj的属性方法与__proto__
  • 使prototype.constructor=classB使构造器变成classB的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值