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

JavaScript中的call方法和apply方法

要先明白存在call和apply的原因,才能記得牢一點:
在javascript OOP中,我們經常會這樣定義:
function cat(){
}
cat.prototype={
food:"fish",
say: function(){
alert("I love "+this.food);
}
}


var blackCat = new cat;
blackCat.say();

但是如果我們有一個物件whiteDog = {food:"bone"},我們不想對它重新定義say方法,那麼我們可以通過call或apply用blackCat的say方法:blackCat.say.call(whiteDog);

所以,可以看出call和apply是為了動態改變this而出現的,當一個object沒有某個方法,但是其他的有,我們可以藉助call或apply用其它物件的方法來操作。

用的比較多的,通過document.getElementsByTagName選擇的dom 節點是一種類似array的array。它不能應用Array下的push,pop等方法。我們可以通過:
var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
這樣domNodes就可以應用Array下的所有方法了。

其他的就不提了,講多了反而迷惑。

相關推薦

Javascriptcall()方法apply()方法的作用與區別

形式 時速 有效 let 調用函數 ply lane pan arguments ECMAScript規範所有函數都包含兩個非繼承的方法,分別為call()和apply(),這兩個函數都是在特定的作用域中調用函數,能改變函數的作用域,實際上是改變函數體內“t

JavaScriptcall方法apply方法

要先明白存在call和apply的原因,才能記得牢一點: 在javascript OOP中,我們經常會這樣定義: function cat(){ } cat.prototype={ food:"fish", say: function(){ alert("I love "+this.food); } } va

javaScript的難度開頭---使用call方法apply方法

tex 構造 meta scrip 尼龍 person css 個人 傳遞 javaScript 的組合繼承 1,使用 call 方法 定義:調用一個對象的一個方法,以另一個對象替換當前對象。 <!DOCTYPE html> <html

JScall()方法apply()方法用法總結

con get global message 傳遞參數 接收 ESS tty 一般來說 原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的cal

js call() 方法 apply() 方法用法總結

以前對js 的call() 和 apply() 方法的理解一直比較模糊,模稜兩可的狀態,今天閒著有空,在網上查找了相關資料做一下總結 1, 每個函式都包涵兩個非繼承而來的方法,call() 方法 和apply() 方法。 2,相同點兩個方法的作用都是一樣的。 都是在特定的作用域中呼叫

js面試與筆試---jscall()方法apply()方法用法總結

1. 每個函式都包含兩個非繼承而來的方法:call()方法和apply()方法。 2. 相同點:這兩個方法的作用是一樣的。 都是在特定的作用域中呼叫函式,等於設定函式體內this物件的值,以擴充函式賴以執行的作用域。 一般來說,this總是指向呼叫某個方法的物件,但是使

call 方法 apply方法

his comm 應用 [] () itl new 語法 常用 1、方法定義 call方法: 語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定義:調用一個對象的一個方法,以另一個對象替換當前對象。 說明: call 方法可以

函數的call()方法apply()方法

spa 概念 函數 對象 apply() ole javascrip 參數 blog   閱讀各種框架的源碼apply和call方法肯定經常看到,好好理解一下概念至關重要。   JavaScript中的函數也是對象,和其他JavaScript對象沒什麽兩樣,函數對象也可以

call()方法apply()方法用法總結

content urn wan bar track student 理解 程序 數組 1. 每個函數都包含兩個非繼承而來的方法:call()方法和apply()方法。 2. 相同點:這兩個方法的作用是一樣的。 都是在特定的作用域中調用函數,等於設置函數體內this對象的

JavaScript的settergetter方法!!

javascript中的setter、getter是平時接觸比較少的方法,其本身也並不是標準方法,只在非ie瀏覽器裡支援(ie核心也許有其他方法可以做到呢?暫時不知其解),但是加以利用可以做許多事情,比如: 1、對資料的訪問限制: a.value是對value變數

jsmap()方法apply()方法的總結

在學習vue.js的render函式時遇到一段程式碼如下: render: function (createElement) { return createElement('div', Array.apply(null, { length: 20 }).map(

jquery原始碼閱讀知識儲備(5)call方法apply方法接觸

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

javascript的moveStartmoveEnd方法,createTextRange()方法createRange()方法

詳探TextRange物件--查詢與選擇TextRange物件是動態HTML(DHTML)的高階特性,使用它可以實現很多和文字有關的任務,例如搜尋和選擇文字。文字範圍讓您可以選擇性的將字元、單詞和句子從文件中挑選出來。TextRange物件是在HTML文件將要顯示的文字流上建

javascript的split()join()方法

1.split() 將一個字串分割為子字串,將結果作為字串陣列返回,若字串中存在多個分割符號,亦可分割。 形式: stringObj.split([separator,[,limit]]) stringObj 必選項 string物件或者文字 該物件不會被split方法修改

JavaScriptcallapply方法的使用

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

javascriptcall()apply()方法的使用

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

javascriptcall()apply()方法的區別

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

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

JavaScriptcall,apply,bind方法的總結

rom 先來 cnblogs 多個參數 java nat htm 必須 src why?call,apply,bind幹什麽的?為什麽要學這個?   一般用來指定this的環境,在沒有學之前,通常會有這些問題。 var a = { user:"追夢子",