码迷,mamicode.com
首页 > 其他好文 > 详细

改变this的指向

时间:2019-10-24 21:11:57      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:call   动态   它的   console   原函数   div   obj   script   get   

一、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)

 

改变this的指向

标签:call   动态   它的   console   原函数   div   obj   script   get   

原文地址:https://www.cnblogs.com/1220x/p/11734884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!