js中修改this指向的三种方法

call()方法

作用改变函数指向,用于构造函数构造方式继承。
语法 call(指向,参数)
例如:function Father(uname,age){
this.uname = uname;
this.age = age;
}
function Son(u,a){
Father.call(this,u,a)
}
var son1 = new Son(“aa”,18)
**解析:**首先是Son的构造方法,当son1传入的参数实例化之后,Son里面的方法变为了Father.call(this,“aa”,18),需要注意的地方是:此处this并不是参数,而是对于Father里面this指向更改为当前函数中this的说明,而当前函数this指向的是Son,所以在本次执行时,会将function Father里面的this指向变更为指向Son的实例化对象,这就相当于Son继承了Father的构造方法

apply()方法

**作用:**改变函数指向,用于利用apply()来使用Math内置对象方法对数组求取最大值等,主要用于与数组配合使用
语法: apply(指向,[参数])
与call()的相同点 (1)都能调用函数 (2)可以改变函数指向
不同点 call()方法可以有多个参数,apply()方法只能有两个参数,第一个是指向,第二 个是一个数组
用法示例:var arr = [12,545,1,65,12]
var max = Math.max.apply(Math,arr)
详细解析: Math是js系统内置函数,Math.max是其内的方法,它作用的对象只能是多个数字,比如Math.max(1,5,6,8,12,5)里面的1,5,6,8,12,5,而不能是数组。而apply两个参数中的后一个,需要将数据写入数组里面,而将数据导入函数中进行使用的时候,却不是将它作为数组进行的使用,而是直接使用他里面的数组元素数据,这恰好与Math函数不能对数组处理相呼应,此时让this指向Math,然后将值传入,Math函数就能处理数组arr里面的数据了

bind()方法

**作用:**改变this指向
语法: bind(指向,参数)
与call()的相同点 (1)可以改变函数指向 (2)可以拥有多个参数
不同点 (1)不能调用函数 (2)会将函数复制
用法示例:
按钮1
按钮2
按钮3

**详细解析:**此处必须要使用bind重置this指向的原因:setTimeout函数this指向为window,而此处需要它只针对于当前点击的btn生效,则需要重置它的this指向,让其指向当前点击的btn,参考call()示例里面的call(this)指向
function Son(u,a){
Father.call(this,u,a) //此处this指向Son
}
此处bind()是写在btn点击事件下的方法,所以bind()里this指向当前点击的btn

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值