函數(shù)實(shí)例的call方法,可以指定該函數(shù)內(nèi)部this的指向(即函數(shù)執(zhí)行時(shí)所在的作用域),然后在所指定的作用域中,調(diào)用該函數(shù)。并且會(huì)立即執(zhí)行該函數(shù)。
看個(gè)例子來(lái)好好理解這段話。
上面代碼中,a函數(shù)中的this關(guān)鍵字,如果指向全局對(duì)象,返回結(jié)果為456。可以看到,如果call方法沒(méi)有參數(shù),或者參數(shù)為null或undefined或者this,則等同于指向全局對(duì)象。如果使用call方法將this關(guān)鍵字指向keith對(duì)象,也就是將該函數(shù)執(zhí)行時(shí)所在的作用域?yàn)閗eith對(duì)象,返回結(jié)果為123。
call()方法可以傳遞兩個(gè)參數(shù)。第一個(gè)參數(shù)是指定函數(shù)內(nèi)部中this的指向(也就是函數(shù)執(zhí)行時(shí)所在的作用域),第二個(gè)參數(shù)是函數(shù)調(diào)用時(shí)需要傳遞的參數(shù)。
第一個(gè)參數(shù)是必須的,可以是null,undefined,this,但是不能為空。設(shè)置為null,undefined,this表明函數(shù)keith此時(shí)處于全局作用域。第二個(gè)參數(shù)中必須一個(gè)個(gè)添加。而在apply中必須以數(shù)組的形式添加。
call方法的一個(gè)應(yīng)用是調(diào)用對(duì)象的原生方法。也可以用于將類數(shù)組對(duì)象轉(zhuǎn)換為數(shù)組。
上面代碼中,hasOwnProperty是obj對(duì)象繼承的方法,如果這個(gè)方法一旦被覆蓋,就不會(huì)得到正確結(jié)果。call方法可以解決這個(gè)方法,它將hasOwnProperty方法的原始定義放到obj對(duì)象上執(zhí)行,這樣無(wú)論obj上有沒(méi)有同名方法,都不會(huì)影響結(jié)果。要注意的是,hasOwnProperty是Object.prototype原生對(duì)象的方法,而call是繼承自Function.prototype的方法。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com