JavaScript中神奇的call()方法
先看看關(guān)于call()的官方解釋,“調(diào)用一個(gè)對(duì)象的一個(gè)方法,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象?!?,看了這樣的解釋,或許讓你更摸不著頭腦了??蠢樱?br />
var x = "我是全局變量"; //定義全局變量x
function a(){ //定義函數(shù)類結(jié)構(gòu)a
this.x = "我是在函數(shù)類結(jié)構(gòu)a中聲明的哦";
}
//定義普通函數(shù),彈出當(dāng)前指針?biāo)淖兞縳的值
function f(){
alert (this.x);
}
//返回值為“我是在函數(shù)類結(jié)構(gòu)a中聲明的哦”
f.call(new a());
我的理解是,f.call(new a())就是把函數(shù)(其實(shí)也是對(duì)象)f復(fù)制到被調(diào)用對(duì)象“new a()”下面去解析,事實(shí)上和下面這段代碼的解析結(jié)果一樣:
function a(){
this.x = "我是在函數(shù)類結(jié)構(gòu)a中聲明的哦";
alert(this.x);
}
a();
只不過(guò)此時(shí)變量X的作用域不同而已,咿…看起來(lái)好像有點(diǎn)繼承的味道哦,難道不是嗎?在上例中,f完全被構(gòu)造函數(shù)a的實(shí)力對(duì)象繼承了,如果說(shuō)這還不足以說(shuō)明a.call(b)是一種繼承模式,那么再看一個(gè)更具有繼承味道的用法吧。
function f(){
this.a ="a";
this.b = function(){
alert("b");
}
}
function e(){
f.call(this);
}
var c = new e();
alert(c.a); //彈出a
c.b(); //彈出b
在這個(gè)例子中,只要會(huì)使用瀏覽器的朋友,都能看得出來(lái)e完全繼承了f的屬性和方法,否則是無(wú)法解釋的,因?yàn)樵趀中并沒(méi)有定義屬性a和b,那么按常理推斷在e的實(shí)例對(duì)象c中,并不會(huì)出現(xiàn)這兩個(gè)屬性。
- 小議Function.apply()之二------利用Apply的參數(shù)數(shù)組化來(lái)提高 JavaScript程序性能
- JS面向?qū)ο蟆rototype、call()、apply()
- JavaScript中的apply()方法和call()方法使用介紹
- 基于JavaScript實(shí)現(xiàn)繼承機(jī)制之調(diào)用call()與apply()的方法詳解
- JavaScript中的prototype.bind()方法介紹
- angularJS中$apply()方法詳解
- Javascript中的apply()方法淺析
- 淺談javascript的call()、apply()、bind()的用法
相關(guān)文章
利用JavaScript實(shí)現(xiàn)網(wǎng)頁(yè)版2048小游戲
這篇文章主要介紹了如何利用HTML+CSS+JS編寫(xiě)一個(gè)網(wǎng)頁(yè)版的2048小游戲,代碼簡(jiǎn)單易懂對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11
js實(shí)現(xiàn)ajax的用戶簡(jiǎn)單登入功能
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)ajax的用戶簡(jiǎn)單登入功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
JavaScript實(shí)現(xiàn)異步獲取表單數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)異步獲取表單數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05
webpack圖片轉(zhuǎn)為base64的實(shí)現(xiàn)示例
在開(kāi)發(fā)過(guò)程中,圖片轉(zhuǎn)成base64是常有的事,本文主要介紹了webpack圖片轉(zhuǎn)為base64的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
javascript 事件處理、鼠標(biāo)拖動(dòng)效果實(shí)現(xiàn)方法詳解
在經(jīng)歷了漫長(zhǎng)的時(shí)期,終于下定了決心自己寫(xiě)一個(gè)層的拖動(dòng)。當(dāng)然了,其它的拖動(dòng)也是這樣的思路和做法,或者說(shuō),這樣的拖動(dòng)適合所有的可見(jiàn)元素2012-05-05
JavaScript面向?qū)ο笾薪涌趯?shí)現(xiàn)方法詳解
這篇文章主要介紹了JavaScript面向?qū)ο笾薪涌趯?shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了javascript面向?qū)ο蠼涌诘母拍?、?shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-07-07
ASP.NET jquery ajax傳遞參數(shù)的實(shí)例
下面小編就為大家?guī)?lái)一篇ASP.NET jquery ajax傳遞參數(shù)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
JS+CSS模擬可以無(wú)刷新顯示內(nèi)容的留言板實(shí)例
這篇文章主要介紹了JS+CSS模擬可以無(wú)刷新顯示內(nèi)容的留言板,涉及javascript操作dom元素、鼠標(biāo)事件及css樣式的技巧,需要的朋友可以參考下2015-03-03

