x.f2.call(this)中call(this)是什么意思

function X(){
    return object = {
        name:'object',
        f1(x){
            x.f2.call(this)        
        },
        f2(){
            console.log(this)
        }
    }
}

var options = {
    name:'options',
    f1(){},
    f2(){
        console.log(this)    
    }
}

var x = X()
x.f1(options)
阅读 2.1k
1 个回答

call的作用是改变一个函数调用时的this值,并提供函数调用的参数。

var x = X(),此时xobject对象;
x.f1(options),因为f1是作为全局变量x的属性调用的,所以执行x.f1的时候,方法里面的this指向全局变量x,传入参数options,所以函数的参数x指向全局变量options

f1(x){
    x.f2.call(this) // this变量指向全局变量x,注意是全局变量x,并不是参数x,参数x指向全局变量options
}

把上述代码的变量替换一下:

options.f2.call(x) // 参数x替换成全局变量options,变量this替换成全局变量x

options.f2执行的时候,因为f2是作为options的属性调用的,所以默认该函数里面的this指向options对象,但是使用了call(x),也就是该方法调用的时候,明确设置this指向全局变量x

f2(){
    console.log(this) // 明确设置this是全局变量x,此时打印的是全局变量x。
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题