javascript中call apply 的應(yīng)用場(chǎng)景
在一些jQuery插件中經(jīng)常看到類似 callback.call(xxx,xxx) 雖然看到書(shū)上有介紹 說(shuō)call和apply函數(shù)可以改變作用域,但還是無(wú)法非常透徹的理解改變作用域主要是為了解決什么問(wèn)題,有沒(méi)有替代方案,或者 這2個(gè)函數(shù)主要為了解決什么問(wèn)題,應(yīng)用場(chǎng)景,何時(shí)使用最合適,每次讀到這樣的代碼就暈了,一下子從線性閱讀中跳出去了,感覺(jué)有點(diǎn)繞
call和apply的作用很簡(jiǎn)單,就是改變上下文,適用場(chǎng)景太多了,雖然有時(shí)候只是為了“美觀”,下面幾個(gè)是我常用的。
1.
用來(lái)判斷 Obj 的類型
arguments 雖然和Array 很像,但是他沒(méi)有Array的push之類的方法,怎么辦?
Array.prototype.push.call(arguments)
3.Javascript 沒(méi)有私有方法的概念,想用閉包實(shí)現(xiàn)
(function () {
var Person = function () {
this.doSomeThing = function () {
_privateFunction.call(this);
}
}
var _privateFunction = function () {
}
window.Person = Person;
}).call(window);
差不多就是這個(gè)意思,callback的時(shí)候,當(dāng)你希望你的callback中的上下文是當(dāng)前上下文的時(shí)候,也可以用call或者apply,有什么好處呢?
這個(gè)時(shí)候你的callback 里面的this 就是指代當(dāng)前上下文。例如一個(gè)類Person,然后他的方法 say 有一個(gè)callback的參數(shù),如果這個(gè)callback是通過(guò)普通的括號(hào)來(lái)執(zhí)行的話,那在這個(gè)callback里面執(zhí)行person的其它方法還需要用person.other 來(lái)實(shí)現(xiàn),但是切換上下文之后,就是this.other搞定~代碼對(duì)比如下:
var Person = function(){
};
Person.prototype.say = function(callback){
callback();
};
Person.prototype.other = function(){
};
var vincent = new Person();
vincent.say(function(){
vincent.other();
});
用了call的:
var Person = function(){
};
Person.prototype.say = function(callback){
callback.call(this);
};
Person.prototype.other = function(){
};
var vincent = new Person();
vincent.say(function(){
this.other();
});
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
相關(guān)文章
JS動(dòng)態(tài)創(chuàng)建Table,Tr,Td并賦值的具體實(shí)現(xiàn)
這篇文章介紹了JS動(dòng)態(tài)創(chuàng)建Table,Tr,Td并賦值的具體實(shí)現(xiàn),有需要的朋友可以參考一下2013-07-07
js閉包實(shí)現(xiàn)按秒計(jì)數(shù)
閉包是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。相信很少有人能直接看懂這句話,因?yàn)樗枋龅奶珜W(xué)術(shù)。其實(shí)這句話通俗的來(lái)說(shuō)就是:JavaScript中所有的function都是一個(gè)閉包。2015-04-04
NodeJS的模塊寫(xiě)法入門(mén)(實(shí)例代碼)
前面提到了NodeJS的命令行和Web版之“Hello,World”。命令行是直接執(zhí)行hello.js文件,Web版的需要require http模塊。http模塊是NodeJS自身提供的2012-03-03
Javascript的promise,async和await的區(qū)別詳解
這篇文章主要為大家詳細(xì)介紹了Javascript的promise,async和await的區(qū)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03
dispatchEvent解決重疊元素響應(yīng)事件示例詳解
這篇文章主要為大家介紹了dispatchEvent解決重疊元素響應(yīng)事件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
JS實(shí)現(xiàn)點(diǎn)擊圖片在當(dāng)前頁(yè)面放大并可關(guān)閉的漂亮效果
點(diǎn)擊圖片在當(dāng)前頁(yè)面放大的漂亮效果實(shí)現(xiàn)方法有很多,在本文將為大家介紹下使用Lightbox JS是如何實(shí)現(xiàn)的,感興趣的朋友不要錯(cuò)過(guò)2013-10-10

