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