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)樵趀中并沒有定義屬性a和b,那么按常理推斷在e的實(shí)例對(duì)象c中,并不會(huì)出現(xiàn)這兩個(gè)屬性。
- 小議Function.apply()之二------利用Apply的參數(shù)數(shù)組化來(lái)提高 JavaScript程序性能
- JS面向?qū)ο?、prototype、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)詳解
深拷貝和淺拷貝是面試中經(jīng)常出現(xiàn)的,主要考察對(duì)基本類型和引用類型的理解深度,這篇文章主要給大家介紹了關(guān)于js深拷貝和淺拷貝的相關(guān)資料,需要的朋友可以參考下2022-11-11小程序canvas實(shí)現(xiàn)畫布半圓環(huán)
這篇文章主要為大家詳細(xì)介紹了小程序canvas實(shí)現(xiàn)畫布半圓環(huán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06使用uniapp實(shí)現(xiàn)發(fā)布朋友圈功能
這篇文章主要介紹了使用uniapp實(shí)現(xiàn)發(fā)布朋友圈功能,在文章底部給大家介紹了uniapp?微信小程序分享、分享朋友圈功能,通過(guò)頁(yè)內(nèi)自定義分享按鈕,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09JS公共小方法之判斷對(duì)象是否為domElement的實(shí)例
下面小編就為大家?guī)?lái)一篇JS公共小方法之判斷對(duì)象是否為domElement的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11JS識(shí)別瀏覽器類型(電腦瀏覽器和手機(jī)瀏覽器)
本文給大家分享一段js代碼關(guān)于識(shí)別瀏覽器的類型是手機(jī)瀏覽器還是電腦瀏覽器,有需要的朋友可以參考下本文2016-11-11bootstrap基本配置_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了bootstrap基本配置,詳細(xì)講解如何下載并安裝 Bootstrap,討論 Bootstrap 文件結(jié)構(gòu),并通過(guò)一個(gè)實(shí)例演示它的用法。2017-07-07Bootstrap基本插件學(xué)習(xí)筆記之標(biāo)簽切換(17)
這篇文章主要為大家詳細(xì)介紹了Bootstrap基本插件學(xué)習(xí)筆記之標(biāo)簽切換的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12JS小功能(列表頁(yè)面隔行變色)簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了JS列表頁(yè)面隔行變色簡(jiǎn)單實(shí)現(xiàn),有需要的朋友可以參考一下2013-11-11