js高级原型对象解读

原型对象

产生原因说明:
**构造函数的缺陷:**每个构造出来的实例对象里面都会内置有构造函数里面的所有方法,这会导致同一个方法在多个实例对象中同时存在,而方法这个复杂数据类型又需要占据较大的空间,所以会造成大量的空间浪费
解决办法: js规定,每一个构造函数都有一个prototype属性,指向另一个对象(原型对象,一个对象空间)。
prototype特征 prototype本身就是一个对象,这个对象的特性是:其内所有的属性和方法,都会被构造函数所拥有
**优点:**这也可以使所有实例对象都能共用里面的方法,无需给每个实例都开辟存放公用方法的空间
使用方法:构造函数名.prototype.公用方法名 = function(){}
如: Star.prototype.sing = function(){ //以静态对象的形式写入
console.log(123465)
}
原型对象
prototype原理解析

当生成一个构造函数时,js系统会自动生成一个绑定于该构造函数的公用空间prototype(普通函数也一样会生成,只不过目前不知道会不会使用到它),这个空间不会随着实例化对象的出现分配给实例化对象,而是会通过js系统默认给实例化对象里面写入的对象原型__proto__来进行操作,里面包含的是公用空间prototype的地址,即指向公用空间prototype。当实例化对象需要调用方法时,会从对象原型__proto__属性里面获取到存储于prototype空间中对应的地址,然后达到调用的效果。
原型对象prototype和相应构造函数绑定的方式
绑定方式为在prototype原型对象空间里面创建一个记录构造函数的constructor,里面包含所绑定构造函数的所有this指向的属性名以及构造函数的函数名
存在的问题:
当往原型对象里面添加方法时,会将prototype原型对象空间里的constructor替换掉,这样会导致的结果是原型对象无法再指向构造函数,以至于无法和构造函数绑定。
解决的办法:
Star.prototype = {
constructor : Star //表示手动将constructor属性写给原型对象prototype,让其可以实现绑定
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值