简单快速理解js中的this、call和apply
注:本文案例环境为非严格模式,严格模式下禁止关键字this指向全局对象
一、方法是怎么执行的?
首先说一下js中方法的执行,在window全局下声明一个方法a:
function a () {
console.log(this);
}
a();//window
全局中执行这个方法普遍的方法是直接a(),这个方法的执行环境是window,控制台会打印出window对象。
那么为什么会打印出window对象呢?我们可以这样理解,方法的执行必须要有个直接调用者,刚才那个方法a是定义在window全局下的,window下的变量和方法有个特点就是访问和调用的时候可以省略window!所以刚才执行a() === window.a(),也就是说,执行a方法时的直接调用者是window。!
上面有提到直接调用者,怎么看待这个直接调用者呢?举个例子,声明一个全局对象obj:
var name = "window-name";
var obj = {
name:"obj-name",
a:function(){
console.log(this.name);
},
b:{
name:"b-name",
a:function(){
console.log(this.name);
}
}
}
obj.a();//obj-name
obj.b.a();//b-name
分别执行obj.a();