最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中的call方法和apply方法使用對比

 更新時間:2015年08月12日 16:40:15   作者:libuchao  
這篇文章主要介紹了JavaScript中的call方法和apply方法使用對比,需要的朋友可以參考下

方法定義
call方法:
語法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
定義:調(diào)用一個對象的一個方法,以另一個對象替換當前對象。
說明:
call 方法可以用來代替另一個對象調(diào)用一個方法。call 方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對象。
如果沒有提供 thisObj 參數(shù),那么 Global 對象被用作 thisObj。

apply方法:
語法:apply([thisObj[,argArray]])
定義:應(yīng)用某一對象的一個方法,用另一個對象替換當前對象。
說明:
如果 argArray 不是一個有效的數(shù)組或者不是 arguments 對象,那么將導(dǎo)致一個 TypeError。
如果沒有提供 argArray 和 thisObj 任何一個參數(shù),那么 Global 對象將被用作 thisObj, 并且無法被傳遞任何參數(shù)。
 
常用實例
a、

function add(a,b) 
{ 
 alert(a+b); 
} 
function sub(a,b) 
{ 
 alert(a-b); 
} 
 
add.call(sub,3,1); 

 這個例子中的意思就是用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,所以運行結(jié)果為:alert(4); // 注意:js 中的函數(shù)其實是對象,函數(shù)名是對 Function 對象的引用。
 
b、

function Animal(){ 
 this.name = "Animal"; 
 this.showName = function(){ 
  alert(this.name); 
 } 
} 
 
function Cat(){ 
 this.name = "Cat"; 
} 
 
var animal = new Animal(); 
var cat = new Cat(); 
 
//通過call或apply方法,將原本屬于Animal對象的showName()方法交給對象cat來使用了。 
//輸入結(jié)果為"Cat" 
animal.showName.call(cat,","); 
//animal.showName.apply(cat,[]); 

 call 的意思是把 animal 的方法放到cat上執(zhí)行,原來cat是沒有showName() 方法,現(xiàn)在是把animal 的showName()方法放到 cat上來執(zhí)行,所以this.name 應(yīng)該是 Cat
 
c、實現(xiàn)繼承

function Animal(name){  
 this.name = name;  
 this.showName = function(){  
  alert(this.name);  
 }  
}  
 
function Cat(name){ 
 Animal.call(this, name); 
}  
 
var cat = new Cat("Black Cat");  
cat.showName(); 

 Animal.call(this) 的意思就是使用 Animal對象代替this對象,那么 Cat中不就有Animal的所有屬性和方法了嗎,Cat對象就能夠直接調(diào)用Animal的方法以及屬性了.
 
d、多重繼承

function Class10() 
{ 
 this.showSub = function(a,b) 
 { 
  alert(a-b); 
 } 
} 
 
function Class11() 
{ 
 this.showAdd = function(a,b) 
 { 
  alert(a+b); 
 } 
} 
 
function Class2() 
{ 
 Class10.call(this); 
 Class11.call(this); 
} 

 很簡單,使用兩個 call 就實現(xiàn)多重繼承了
當然,js的繼承還有其他方法,例如使用原型鏈,這個不屬于本文的范疇,只是在此說明call 的用法。說了call ,當然還有 apply,這兩個方法基本上是一個意思,區(qū)別在于 call 的第二個參數(shù)可以是任意類型,而apply的第二個參數(shù)必須是數(shù)組,也可以是arguments

JavaScript 中的call和apply方法主要用來改變函數(shù)對象的上下文,即函數(shù)中this所指向的內(nèi)容。

調(diào)用方法如下:

fun.call(obj1, arg1, arg2, ...);
fun.apply(obj2, [arrs]);

具體示例:

var Obj1 = {
 name: 'Object1',
 say: function(p1, p2) {
  console.log(this.name + ' says ' + p1 + ' ' + p2);
 }
};

// logs 'Object1 says Good morning'
Obj1.say('Good', 'morning');

var Obj2 = {
 name: 'Object2'
};

// logs 'Object2 says Good afternoon'
Obj1.say.call(Obj2, 'Good', 'afternoon');

// logs 'Object2 says Good afternoon again'
Obj1.say.apply(Obj2, ['Good', 'afternoon again']);

通過示例可以看出,通過常規(guī)方式調(diào)用say的時候,方法中的this指向Obj1,而通過call和apply調(diào)用的時候,this卻指向了Obj2。

通過示例可以看出,call和apply的作用是完全相同的,其調(diào)用方法的區(qū)別也只是參數(shù)列表不同罷了。

相關(guān)文章

  • 第一個JavaScript入門基礎(chǔ) document.write輸出

    第一個JavaScript入門基礎(chǔ) document.write輸出

    關(guān)于JavaScript,他是一個OOSP(面向?qū)ο竽_本語言)他是用來創(chuàng)建動態(tài)網(wǎng)站,增強用戶界面的一門技術(shù)。如果你想了解更多關(guān)于JavaScript的信息,請去維基百科查詢。
    2010-02-02
  • Javascript基礎(chǔ)知識詳解

    Javascript基礎(chǔ)知識詳解

    本篇適合javascript新手或者學(xué)了前端一段時間,對js概念不清晰的同學(xué)。本文將講述幾點對于初學(xué)者遇到的javascript的坑,相信對javascript基礎(chǔ)薄弱的同學(xué),可以加深對javascript的理解
    2021-10-10
  • 深入聊一聊JS中new的原理與實現(xiàn)

    深入聊一聊JS中new的原理與實現(xiàn)

    這篇文章主要給大家介紹了關(guān)于JS中new的原理與實現(xiàn)的相關(guān)資料,本文通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-11-11
  • javascript學(xué)習(xí)筆記(三)BOM和DOM詳解

    javascript學(xué)習(xí)筆記(三)BOM和DOM詳解

    本文應(yīng)用了很多實例,來解讀JavaScript中BOM和DOM,DOM是一個使程序和腳本有能力動態(tài)地訪問和更新文檔的內(nèi)容、結(jié)構(gòu)以及樣式的平臺和語言中立的接口。,而BOM定義了JavaScript可以進行操作的瀏覽器的各個功能部件的接口。
    2014-09-09
  • javascript實現(xiàn)dom元素可拖動

    javascript實現(xiàn)dom元素可拖動

    HTML DOM 是 W3C 標準(是 HTML 文檔對象模型的英文縮寫,Document Object Model for HTML)。通過 DOM,可以訪問所有的 HTML 元素,連同它們所包含的文本和屬性。可以對其中的內(nèi)容進行修改和刪除,同時也可以創(chuàng)建新的元素。
    2016-03-03
  • 全面了解JavaScirpt 的垃圾(garbage collection)回收機制

    全面了解JavaScirpt 的垃圾(garbage collection)回收機制

    下面小編就為大家?guī)硪黄媪私釰avaScirpt 的垃圾(garbage collection)回收機制。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • JavaScript 學(xué)習(xí)筆記(十二) dom

    JavaScript 學(xué)習(xí)筆記(十二) dom

    新的一章的學(xué)習(xí)----Dom,重點啊
    2010-01-01
  • 一篇文章帶你了解JavaScript的包裝類型

    一篇文章帶你了解JavaScript的包裝類型

    這篇文章主要為大家詳細介紹了JavaScript的包裝類型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 溫故知新——JavaScript中的字符串連接問題最全總結(jié)(推薦)

    溫故知新——JavaScript中的字符串連接問題最全總結(jié)(推薦)

    這篇文章主要介紹了JS中的字符串連接問題,ECMAScript 中最常見的一個問題是字符串連接的性能。在調(diào)用 join() 方法時才會發(fā)生連接操作,具體操作步驟大家可查看下文的詳細講解,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • javaScript事件機制兼容【詳細整理】

    javaScript事件機制兼容【詳細整理】

    下面小編就為大家?guī)硪黄猨avaScript事件機制兼容【詳細整理】。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07

最新評論

罗源县| 红安县| 沾益县| 县级市| 平湖市| 贵州省| 平乐县| 哈巴河县| 田阳县| 育儿| 临城县| 潼关县| 南华县| 黄大仙区| 葫芦岛市| 休宁县| 浦城县| 勃利县| 敦化市| 天祝| 宣威市| 来宾市| 蛟河市| 华池县| 筠连县| 福建省| 吴桥县| 万山特区| 卫辉市| 北辰区| 古丈县| 乾安县| 巴青县| 濮阳县| 泸水县| 同江市| 深圳市| 临漳县| 虹口区| 筠连县| 贵德县|