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)
call
的作用是改变一个函数调用时的this
值,并提供函数调用的参数。var x = X()
,此时x
是object
对象;x.f1(options)
,因为f1
是作为全局变量x
的属性调用的,所以执行x.f1
的时候,方法里面的this
指向全局变量x
,传入参数options
,所以函数的参数x
指向全局变量options
:把上述代码的变量替换一下:
options.f2
执行的时候,因为f2
是作为options
的属性调用的,所以默认该函数里面的this
指向options
对象,但是使用了call(x)
,也就是该方法调用的时候,明确设置this
指向全局变量x
: