js改变this指向的方法

改变函数内部的this指向的三种方法:call(),apply(),bind()

1、call()改变this指向

语法: 函数.call(this, arg1, arg2, arg3, arg4)
第一个参数用来指定函数内部的this指向,后面的参数是函数执行时所需的实参。

window.color = 'red';
document.color = 'yellow';
  
var s1 = {color: 'blue' };
function changeColor(){
console.log(this.color);
}
  
changeColor.call(); //red (默认传递参数)
changeColor.call(window); //red
changeColor.call(document); //yellow
changeColor.call(this); //red
changeColor.call(s1); //blue

eg2

var Pet = {
	words : '...',
	speak : function (say) {
	console.log(say + ''+ this.words)
	}
}

Pet.speak('Speak'); // 结果:Speak...
  
var Dog = {
words:'Wang'
}

Pet.speak.call(Dog,'Speak')	//结果 SpeakWang

2、apply()改变this指向

第一个参数用来指定函数内部的this指向;
第二个参数要求是一个数组或者伪数组,apply会把它平铺然后传入对应的函数中.

function Pet(words){
	this.words = words;
	this.speak = function () {
		console.log( this.words)
	}
}
function Dog(words){
	//Pet.call(this, words); //结果: Wang
	Pet.apply(this, arguments); //结果: Wang
}
var dog = new Dog('Wang');
dog.speak();

(3)bind改变this

语法: 函数.bind(this);
该方法返回一个函数,是一个新的函数,

this.name="jack";
var demo={
	name:"rose",
	getName:function(){return this.name;}
}
  
console.log(demo.getName());//输出rose  这里的this指向demo
  
var another=demo.getName;
console.log(another())//输出jack  这里的this指向全局对象
   
//运用bind方法更改this指向
var another2=another.bind(demo);
console.log(another2());//输出rose  这里this指向了demo对象了;

在这里插入图片描述
区别:
1、apply,接受第二个参数是数组或伪数组,如果argArray不是一个有效数组或不是arguments对象,那么将导致一个TypeError
2、不同之处是call和apply是一次性改变this,bind是永久性改变this,可以认为bind的灵活性更高,你可以先把this绑定好, 然后什么时候想执行就什么时候执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值