1. 程式人生 > >js中的call和apply方法

js中的call和apply方法

一、call和apply的說明

1、call,apply都屬於Function.prototype的一個方法,它是JavaScript引擎內在實現的,因為屬於Function.prototype,所以每個Function物件例項(就是每個方法)都有call,apply屬性。既然作為方法的屬性,那它們的使用就當然是針對方法的了,這兩個方法是容易混淆的,因為它們的作用一樣,只是使用方式不同。

2、語法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3);

3、相同點:兩個方法產生的作用是完全一樣的。

4、不同點:方法傳遞的引數不同。

二、例項程式碼
複製程式碼 程式碼如下:

function A(){ this.flag = 'A'; this.tip = function(){ alert(this.flag); }; } function B(){ this.flag = 'B'; } var a = new A(); var b = new B(); //a.tip.call(b); a.tip.apply(b);

三、程式碼解釋(即說明apply和call作用)

1、例項程式碼定義了兩個函式A和B,A中包含flag屬性和tip屬性(這個屬性賦值一個函式),B中有一個flag屬性。

2、分別建立A和B的物件a和b。

3、無論是a.tip.call(b);和a.tip.apply(b);執行的結果都是彈出B。

4、從結果中可以看出call和apply都可以讓B物件呼叫A物件的tip方法,並且修改了this的當前作用物件。

相關推薦

面試官問:能否模擬實現JScallapply方法

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

JavaScriptcallapply方法的使用

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

jscallapply方法

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

javascriptcall()apply()方法的區別

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

jscall()apply()的區別

JS中每個函式都包含兩個非繼承而來的方法:apply()和call()。這兩個方法都用於在特定的作用域中呼叫函式,即將一個函式繫結到另一個函式中,比如有兩個函式A和B,要在B函式中呼叫A函式,就需要用到這兩個方法,說白了就是設定函式體內this物件的值。    call

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...)=函

jscallapply方法

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

JS裡面call( )apply( )以及bind( )方法

call( ) 和 apply( )兩個方法總體來說區別不大,都是轉換作用域this的指代,它們的作用是: 讓函式在某個指定的物件下執行。 就是傳參方式有點區別。 javaScript權威指南上的解釋是: call() 、apply()可以看作是某個物件的方法,通過呼叫方法的形式來間接呼叫函

javascriptcall()apply()方法的使用

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

jscallapplybind

call和apply obj.call(thisObj, arg1, arg2, ...); obj.apply(thisObj, [arg1, arg2, ...]); 兩者作用一致,都是把obj(即this)繫結到thisObj,這時候thisObj具備了obj的屬

call apply方法解析

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

callapply方法的異同

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

jscallapply, bind的自我心得

apply 和 call 的區別 apply和call: apply和call作用相同,只是在傳參上面有點小差別,兩個方法一個是將呼叫函式中的引數放在一個數組中傳過去,一個是一個一個傳過去。 這裡用apply方法做講解,apply方法傳入兩個引數:一個是作為函式上下文的物件

JScallapply、bind大概區別

為什麼需要這些?主要是因為this,來看看this乾的好事。 box.onclick = function(){   function fn(){     alert(this);   }   fn(); }; 我們原本以為這裡面的this指向的是box,然

jscallapply、bind的用法及區別

call、apply和bind:三者作用一致(都是改變函式的this指向),只是使用的方法不同而已。apply 、 call 、bind 三者都是用來改變函式的this物件的指向的;apply 、 call 、bind 三者第一個引數都是this要指向的物件,也就是想指定的上

JS陣列字串方法的簡單整理

一、陣列:   陣列的基本方法:              1、增:arr.unshift() /push()    前增/後增  &nbs

javascriptcallapply的模擬實現

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

Javascriptcallapply的區別與詳解

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