this
一、this的理解
第一准则: this 永远指向函数 运行时 所在的对象,而不是函数被创建时所在的对象【不包含箭头函数】
二、this 的集中指向:
-
window 对象 如: console.log(this);
-
函数中的 this 函数中的this,谁调用函数,函数中的 this 就指向谁,一般指向 window 如:
function foo() { console.log(this); } foo();
-
对象中的 this ,一般指向对象 如:
var obj = { name: "jack", run: function() { console.log(this.name+"run"); } } obj.run();
-
构造函数中的 this, 指向实例化出来的对象
function Person(name) { this.name = name; // this 指向当前实例化的对象。 }
三、借来的 this (难点)
可以借助一些方法手动修改 this 的指向。
1、fn.call(对象, 参数1, 参数2…) 【将函数的上下文环境切换到另外一个对象中】【参数利用逗号隔开,如"小乔",“一天”】
注意:
该函数会立即执行;
执行一次。
2、fn,apply(对象, [参数1, 参数2…])
用法同 call ,只是传参方式不一样。apply传的是数组
3、 fn.bind(对象)
用于被动修改 this 的指向【一般用于修改回调函数的方法】
小总结:call 、apply 、bind 的区别
相同点: 都是用于改变函数中 this 的指向。
不同点:
call 、apply 都是立即执行(主动),用于一般函数
bind 是被动执行,通常用于回调函数
call 直接将参数举例在对象的后面
apply 是以数组的形式传递参数