改变this指向的方法及区别

本文介绍了JavaScript中通过bind、call及apply三种方法改变函数内部this指向的技巧,并对比了它们之间的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

改变this指向的方法有:.bind()、call() 、apply()

  1. call()
window.color = 'red';
document.color = 'yellow';
var s1 = {color: 'blue'};
function changeColor () {
	console.log(this.color);
}
changeColor.call()	//不传参数默认指向window 输出:red
changeColor.call(window)	//指向window 输出:red
changeColor.call(document)	//指向document 输出:yellow
changeColor.call(this)	//构造函数的this如果打括号调用默认指向window 输出:red
changeColor.call(s1)	//指向s1对象 输出:blue
  1. apply()
window.number = 'one';
document.number = 'two';
var s1 = {number: 'three'};

function changeNum() {
	console.log(this.number)
}
changeNum.apply();	//one
changeNum.apply(window);	//one
changeNum.apply(document);//two
changeNum.apply(this);//one
changeNum.apply(s1);//three
  1. bind()
var obj = {
	name: '123'
}
function fn() {
	console.log(this.name)
}
var wuXiaoDi = fn.bind(obj)
console.log(fn)	//function(){...}
wuXiaoDi()	//123

区别:
bind与call和apply的区别:
返回值的区别:
bind的返回值是一个函数,而call和apply是立即调用。
参数使用的区别:
bind有返回值 返回值是调用bind方法的函数本身
call 没有返回值 他的第一个参数是要this的指向。第一个参数是谁,函数内部的this就指向谁其他参数以散落的形式传递给函数作为实参
apply 没有返回值 他的第一个参数是要this的指向。第一个参数是谁,函数内部的this就指向谁其他参数以数组的形式传递给函数作为实参

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值