注:本文案例环境为非严格模式,严格模式下禁止关键字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();
版权声明:本文为weixin_41829196原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。