10-27:改变this指向的方法,call,bind,bind,都有什么区别

博客主要介绍了JavaScript中this的指向问题,一般谁调用this就指向谁,在全局作用域、函数独立调用等情况下this指向window。还讲解了call()、apply()、bind()三种改变this指向的方法,包括其参数使用、格式及不同之处,如call和apply会执行函数,bind返回新函数。

this指向
this随处可见,一般谁调用,this就指向谁。this在不同环境下,不同作用下,表现的也不同。
以下几种情况,this都是指向window的:
全局作用域下,this指向的是window;
函数独立调用时,函数内部的this也指向window
被嵌套的函数独立调用时,this默认指向了window
自执行函数(立即执行)中内部的this也是指向window


call() 方法的第一个参数必须是指定的对象,然后方法的原参数,挨个放在后面。
(1)第一个参数:传入该函数this执行的对象,传入什么强制指向什么;
(2)第二个参数开始:将原函数的参数往后顺延一位

 格式: 函数名.call();


apply() 方法 
apply() 方法的第一个参数是指定的对象,方法的原参数,统一放在第二个数组参数中。
(1)第一个参数:传入该函数this执行的对象,传入什么强制指向什么;
(2)第二个参数开始:将原函数的参数放在一个数组中

 格式: 函数名.apply();


bind() 方法
bind() 方法的用法和call()一样,直接运行方法,需要注意的是:bind返回新的方法,需要重新调用


不同:
bind();call、apply与bind都用于改变 this 绑定
call、apply 在改变 this 指向的同时还会执行函数,一次性的。
不同的是 call方法传递函数调用形参是以散列形式,而 apply 方法的形参是一个数组。在传参的情况下,call的性能要高于 apply,因为 apply 在执行时还要多一步解析数组。
bind 在改变 this 后是返回一个全新的绑定函数,即返回一个新的函数,不直接执行函数。并且此后 this 的指向无法在通过 call、apply、bind 改变。
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值