JS原型

原型的概念

  1. 实例对象中__proto__是原型,是一个属性也是一个对象,是给浏览器使用的,是不标准的,这个叫隐式原型。
  2. 构造函数中的prototype是原型,是一个属性也是一个对象,是给程序员用的,是标准的

       __proto__原型是浏览器使用的,有些浏览器支持,有些浏览器不支持,所以说它是不标准的;而prototype原型则是给程序员用的,所有浏览器都支持;所有我们说的原型一般都指prototype


原型链

原型链:是一种关系,实例对象和原型对象之间的关系,关系是通过原型(__proto__)来联系的

原型的作用

  • 共享数据,节省内存空间
  • 通过原型实现继承

凡是你希望这个方法通过实例对象调用的并且希望共享的,那么这个方法都可以放在原型里面,而不需要共享的数据则写在构造函数中



当有多个属性和方法需要被同时共享时,这时可以将原型对象拿出来写成一个对象,不过此时需要自己手动修改构造器的指向


如果想要使用一些属性和方法,并且属性的值在每个对象中都是一样的,方法在每个对象中的操作也都是一样,那么,为了共享数据,节省内存空间,是可以把属性和方法通过原型的方式进行赋值

原型中的方法是可以被相互调用的

实例对象调用属性和方法时,现在实例对象中查找,找到了直接用,找不到则去实例对象的__proto__指向的构造函数的原型对象prototype中找,找到直接调用,属性找不到为undefined,方法找不到则报错

构造函数、原型对象、实例对象之间的关系

  1. 构造函数可以实例化对象
  2. 构造函数中有一个属性叫prototype,是构造函数的原型对象
  3. 构造函数的原型对象(prototype)中有一个constructor构造器,这个构造器指向的就是自己所在的原型对象所在的构造函数
  4. 实例对象的原型对象(__proto__)指向的是该构造函数的原型对象
  5.  构造函数的原型对象(prototype)中的方法是可以被实例对象直接访问的


改变原型指向

实例对象的原型__proto__指向的是该对象所在的构造函数的原型对象
构造函数的原型对象(prototype)指向如果改变了,实例对象的原型(__proto__)指向也会发生改变



此时若要调用Student通过原型定义的属性和方法则需要定义在改变指向的下面,这样Student的实例对象才能调用



通过原型实现继承

继承: 首先继承是一种关系,类(class)与类之间的关系,JS中没有类,但是可以通过构造函数模拟类,然后通过原型来实现继承 

继承也是为了数据共享,js中的继承也是为了实现数据共享

为了数据共享,改变原型指向,做到了继承,不过因为改变原型指向的同时实现继承,直接初始化了属性,继承过来的属性的值都是一样的了,只能重新调用对象的属性进行重新赋值。此时需要结合借用构造函数形成组合继承,完成完整的继承

借用构造函数:构造函数名字.call(当前对象,属性,属性,属性....);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值