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..
相關推薦
JavaScript中call和apply方法的使用
acvaScript中的call()方法和apply()方法,在某些時候這兩個方法還確實是十分重要的。1. 每個函式都包含兩個非繼承而來的方法:call()方法和apply()方法。2. 相同點:這兩個方法的作用是一樣的。都是在特定的作用域中呼叫函式,等於設定函式體內this物件的值,以擴充函式賴以執行的作用
javascript中call()和apply()方法的區別
首先需要知道 call 和 apply 都是js 物件 prototype的方法 在使用的時候主要區別: var foo() = function(){ ....//程式碼段 } // foo.
javascript中call和apply的模擬實現
call() call() 方法呼叫一個函式, 其具有一個指定的this值和分別地提供的引數(引數的列表)。 語法:fun.call(thisArg, arg1, arg2, ...) 例
Javascript中call和apply的區別與詳解
轉自:http://www.7old.com/jiaocheng/show-1412.html在js中call和apply它們的作用都是將函式繫結到另外一個物件上去執行,兩者僅在定義引數方式有所區別,下面我來給大家介紹一下call和apply用法。 在web前端開發過程中
JavaScript中 call和apply
nbsp clas div 其余 color 接收 style pre ava call()方法和apply()方法的作用相同,他們的區別在於接收參數的方式不同。 對於call(),第一個參數是this值沒有變化,變化的是其余參數都直接傳遞給函數。(在使用call()方法時
javascript中的call()和apply()方法的使用
1、方法定義 call方法: 語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定義:呼叫一個物件的一個方法,以另一個物件替換當前物件。 說明: call 方法可以用來代替另一個物件呼叫一個方法。call 方法可將一個函式的物件上下文從初始的上下文改變為由 th
js中的call()和apply()方法
-m spa script apply() obj cli nbsp val glob 1.call() 語法:obj1.call(obj2[,param1,param2,...])定義:用obj2對象來代替obj1,調用obj1的方法。即將obj1應用到obj2上。說明:
JS中的call()和apply()方法區別
prototype 理解 ace attach bdb .html closed mil solid 如 果沒接觸過動態語言,以編譯型語言的思維方式去理解javaScript將會有種神奇而怪異的感覺,因為意識上往往不可能的事偏偏就發生了,甚至覺得不可 理喻.如果在學Java
前端---js中的call和apply方法用法
最近看到JavaScript中關於call()和apply()方法可以用來呼叫函式的動態呼叫和實現偽繼承兩種功能,今天在這裡給大家詳細介紹一下. 1.call()函式 函式引用.call(呼叫者,引數1,引數2...) 等同於:呼叫者.函式(引數1,引數2...)=函
Javascript中call、apply和bind的區別以及原始碼解析
我們知道在javascript中call和apply以及bind都可以改變this指向,那麼它們是怎麼實現的呢?彼此之間有什麼區別呢?首先我們先來分別解析一下它們: (一)call 首先我們先來看一下如何使用call: var valu
js中的call和apply方法
一、call和apply的說明 1、call,apply都屬於Function.prototype的一個方法,它是JavaScript引擎內在實現的,因為屬於Function.prototype,所以每個Function物件例項(就是每個方法)都有call,a
js的面試筆試--javascript中call()、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。在實際開發中,特別是在一些函數式風格的
javascript中call、apply、bind詳解
組裝 div 分析 rgs 特性 類型 bind詳解 中修改 不支持 1.apply和call的區別在哪裏 2.什麽情況下用apply,什麽情況下用call 3.apply的其他巧妙用法(一般在什麽情況下可以使用apply) 我首先從網上查到關於apply和
call和apply方法的異同
apply() his dom 自己的 super 控制臺輸出 args c中 ons 基本作用:改變對象的執行上下文。 this指向執行上下文。(執行環境) this指向的永遠是調用該方法的對象 function func(){ this.a=1;
javascript中encodeURI和decodeURI方法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
面試官問:能否模擬實現JS的call和apply方法
之前寫過兩篇《面試官問:能否模擬實現JS的new操作符》和《面試官問:能否模擬實現JS的bind方法》 其中模擬bind方法時是使用的call和apply修改this指向。但面試官可能問:能否不用call和apply來實現呢。意思也就是需要模擬實現call和apply的了。 附上之前寫文章寫過的一段
javascript中call()、apply()、bind()的用法
javascript中call()、apply()、bind()的用法 其實是一個很簡單的東西,認真看十分鐘就從一臉懵B 到完全 理解! 先看明白下面: 例1 obj.objAge; //17 obj.myFun() //小張年齡undefined 例2 show
js的call和apply方法
1.call() 語法:obj1.call(obj2[,param1,param2,...]) 定義:用obj2物件來代替obj1,呼叫obj1的方法。即將obj1應用到obj2上。 說明:call 方法可以用來代替另一個物件呼叫一個方法。call 方法可將一個函式的物件上下
javascript中call()、apply()、bind()的用法理解
一、bind的用法 第一個:obj.showInfo('arg','arg_18');中傳的2個引數通過showInfo方法改變的是obj下中的name和age 第二個:obj.showInfo.bind(this)('bind','bind_18');中bind要傳的name和age是通過一個一個傳