1. 程式人生 > >javascript中的call()和apply()方法的使用

javascript中的call()和apply()方法的使用

1、方法定義

call方法: 
語法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 
定義:呼叫一個物件的一個方法,以另一個物件替換當前物件。 
說明: 
call 方法可以用來代替另一個物件呼叫一個方法。call 方法可將一個函式的物件上下文從初始的上下文改變為由 thisObj 指定的新物件。 
如果沒有提供 thisObj 引數,那麼 Global 物件被用作 thisObj。 

apply方法: 
語法:apply([thisObj[,argArray]]) 
定義:應用某一物件的一個方法,用另一個物件替換當前物件。 
說明: 
如果 argArray 不是一個有效的陣列或者不是 arguments 物件,那麼將導致一個 TypeError。 
如果沒有提供 argArray 和 thisObj 任何一個引數,那麼 Global 物件將被用作 thisObj, 並且無法被傳遞任何引數。

2、常用例項

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) ,所以執行結果為:alert(4); // 注意:js 中的函式其實是物件,函式名是對 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來使用了。 //輸入結果為"Cat" animal.showName.call(cat,","); //animal.showName.apply(cat,[]);

 call 的意思是把 animal 的方法放到cat上執行,原來cat是沒有showName() 方法,現在是把animal 的showName()方法放到 cat上來執行,所以this.name 應該是 Cat

c、實現繼承

 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物件就能夠直接呼叫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 就實現多重繼承了
當然,js的繼承還有其他方法,例如使用原型鏈,這個不屬於本文的範疇,只是在此說明call 的用法。說了call ,當然還有 apply,這兩個方法基本上是一個意思,區別在於 call 的第二個引數可以是任意型別,而apply的第二個引數必須是陣列,也可以是arguments
還有 callee,caller..

相關推薦

JavaScriptcallapply方法的使用

acvaScript中的call()方法和apply()方法,在某些時候這兩個方法還確實是十分重要的。1. 每個函式都包含兩個非繼承而來的方法:call()方法和apply()方法。2. 相同點:這兩個方法的作用是一樣的。都是在特定的作用域中呼叫函式,等於設定函式體內this物件的值,以擴充函式賴以執行的作用

javascriptcall()apply()方法的區別

首先需要知道 call 和 apply 都是js 物件 prototype的方法 在使用的時候主要區別: var foo() = function(){ ....//程式碼段 } // foo.

javascriptcallapply的模擬實現

call() call() 方法呼叫一個函式, 其具有一個指定的this值和分別地提供的引數(引數的列表)。 語法:fun.call(thisArg, arg1, arg2, ...) 例

Javascriptcallapply的區別與詳解

轉自:http://www.7old.com/jiaocheng/show-1412.html在js中call和apply它們的作用都是將函式繫結到另外一個物件上去執行,兩者僅在定義引數方式有所區別,下面我來給大家介紹一下call和apply用法。 在web前端開發過程中

JavaScript callapply

nbsp clas div 其余 color 接收 style pre ava call()方法和apply()方法的作用相同,他們的區別在於接收參數的方式不同。 對於call(),第一個參數是this值沒有變化,變化的是其余參數都直接傳遞給函數。(在使用call()方法時

javascriptcall()apply()方法的使用

1、方法定義 call方法: 語法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定義:呼叫一個物件的一個方法,以另一個物件替換當前物件。 說明: call 方法可以用來代替另一個物件呼叫一個方法。call 方法可將一個函式的物件上下文從初始的上下文改變為由 th

jscall()apply()方法

-m spa script apply() obj cli nbsp val glob 1.call() 語法:obj1.call(obj2[,param1,param2,...])定義:用obj2對象來代替obj1,調用obj1的方法。即將obj1應用到obj2上。說明:

JScall()apply()方法區別

prototype 理解 ace attach bdb .html closed mil solid 如 果沒接觸過動態語言,以編譯型語言的思維方式去理解javaScript將會有種神奇而怪異的感覺,因為意識上往往不可能的事偏偏就發生了,甚至覺得不可 理喻.如果在學Java

前端---jscallapply方法用法

最近看到JavaScript中關於call()和apply()方法可以用來呼叫函式的動態呼叫和實現偽繼承兩種功能,今天在這裡給大家詳細介紹一下. 1.call()函式 函式引用.call(呼叫者,引數1,引數2...) 等同於:呼叫者.函式(引數1,引數2...)=函

Javascriptcallapplybind的區別以及原始碼解析

我們知道在javascript中call和apply以及bind都可以改變this指向,那麼它們是怎麼實現的呢?彼此之間有什麼區別呢?首先我們先來分別解析一下它們: (一)call 首先我們先來看一下如何使用call: var valu

jscallapply方法

一、call和apply的說明 1、call,apply都屬於Function.prototype的一個方法,它是JavaScript引擎內在實現的,因為屬於Function.prototype,所以每個Function物件例項(就是每個方法)都有call,a

js的面試筆試--javascriptcall()、apply()、bind()方法的區別

在JavaScript 中,this的指向是動態變化的,很可能在寫程式的過程中,無意中破壞掉this的指向,所以我們需要一種可以把this的含義固定的技術,於是就有了call,apply 和bind這三個方法,來改變函式體內部 this 的指向,因為函式存在「定義時上下文」和

call apply方法解析

ray ntb 方法 綁定 推斷 都是 還要 new int32 ECAMScript 3給Function的原型定義了兩個方法,它們是Function.prototype.call和Function. prototype.apply。在實際開發中,特別是在一些函數式風格的

javascriptcallapply、bind詳解

組裝 div 分析 rgs 特性 類型 bind詳解 中修改 不支持 1.apply和call的區別在哪裏 2.什麽情況下用apply,什麽情況下用call 3.apply的其他巧妙用法(一般在什麽情況下可以使用apply) 我首先從網上查到關於apply和

callapply方法的異同

apply() his dom 自己的 super 控制臺輸出 args c中 ons 基本作用:改變對象的執行上下文。 this指向執行上下文。(執行環境) this指向的永遠是調用該方法的對象 function func(){ this.a=1;

javascriptencodeURIdecodeURI方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

面試官問:能否模擬實現JS的callapply方法

之前寫過兩篇《面試官問:能否模擬實現JS的new操作符》和《面試官問:能否模擬實現JS的bind方法》 其中模擬bind方法時是使用的call和apply修改this指向。但面試官可能問:能否不用call和apply來實現呢。意思也就是需要模擬實現call和apply的了。 附上之前寫文章寫過的一段

javascriptcall()、apply()、bind()的用法

javascript中call()、apply()、bind()的用法 其實是一個很簡單的東西,認真看十分鐘就從一臉懵B 到完全 理解! 先看明白下面: 例1 obj.objAge; //17 obj.myFun() //小張年齡undefined 例2 show

js的callapply方法

1.call() 語法:obj1.call(obj2[,param1,param2,...]) 定義:用obj2物件來代替obj1,呼叫obj1的方法。即將obj1應用到obj2上。 說明:call 方法可以用來代替另一個物件呼叫一個方法。call 方法可將一個函式的物件上下

javascriptcall()、apply()、bind()的用法理解

一、bind的用法 第一個:obj.showInfo('arg','arg_18');中傳的2個引數通過showInfo方法改變的是obj下中的name和age 第二個:obj.showInfo.bind(this)('bind','bind_18');中bind要傳的name和age是通過一個一個傳