改变this的指向

一、this

一般情况下,this是在运行时动态指定的,指向调用它的对象。

在箭头函数中,没有自己的this值,它的this值继承自父作用域,是词法作用域,在定义的时候就被指定了,之后也不变。

二、call、apply、bind的相同点

1、都是用来改变函数的this指向的,执行目标函数的时候把目标函数的this执向改一下,并不会改变原函数的指向

	function fn() {
		console.log(this);
	}
	var obj = {
		a:[4,5,6],
		b:[7,8],
	};
	fn.apply(obj);        // {a: Array(3), b: Array(2)}
	var f = new fn();     // { }
	fn.call(obj);         // {a: Array(3), b: Array(2)}
	var f2 = new fn();    // { }
	fn.bind(obj)();       // {a: Array(3), b: Array(2)}
	var f3 = new fn();    // { }

  

2、第一个参数都是this要指向的对象

3、都可以利用后续参数传参

三、call、apply、bind的区别

1、call和apply都是对函数直接调用,而bind方法返回的是一个函数,还需要()来进行调用。

2、call是一个个的传参,apply是以数组的形式进行传参,bind也是一个个的传参。

fn.call(target_object,name1,name2)

fn.apply(target_object,[name1,name2])

fn.bind(target_object,name1,name2)()

fn.bind(targe_object)(name1,name2)

猜你喜欢

转载自www.cnblogs.com/1220x/p/11734884.html