简单快速理解js中的this、call和apply

  • Post author:
  • Post category:其他


注:本文案例环境为非严格模式,严格模式下禁止关键字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 版权协议,转载请附上原文出处链接和本声明。