鍍金池/ 問(wèn)答/HTML/ x.f2.call(this)中call(this)是什么意思

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)
回答
編輯回答
刮刮樂(lè)

call的作用是改變一個(gè)函數(shù)調(diào)用時(shí)的this值,并提供函數(shù)調(diào)用的參數(shù)。

var x = X(),此時(shí)xobject對(duì)象;
x.f1(options),因?yàn)?code>f1是作為全局變量x的屬性調(diào)用的,所以執(zhí)行x.f1的時(shí)候,方法里面的this指向全局變量x,傳入?yún)?shù)options,所以函數(shù)的參數(shù)x指向全局變量options

f1(x){
    x.f2.call(this) // this變量指向全局變量x,注意是全局變量x,并不是參數(shù)x,參數(shù)x指向全局變量options
}

把上述代碼的變量替換一下:

options.f2.call(x) // 參數(shù)x替換成全局變量options,變量this替換成全局變量x

options.f2執(zhí)行的時(shí)候,因?yàn)?code>f2是作為options的屬性調(diào)用的,所以默認(rèn)該函數(shù)里面的this指向options對(duì)象,但是使用了call(x),也就是該方法調(diào)用的時(shí)候,明確設(shè)置this指向全局變量x

f2(){
    console.log(this) // 明確設(shè)置this是全局變量x,此時(shí)打印的是全局變量x。
}
2018年1月23日 14:46