中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

JavaScript中的apply和call函數詳解
來源:易賢網 閱讀:1327 次 日期:2014-07-22 20:13:45
溫馨提示:易賢網小編為您整理了“JavaScript中的apply和call函數詳解”,方便廣大網友查閱!

本文是翻譯Function.apply and Function.call in JavaScript,希望對大家有所幫助。

第一次翻譯技術文章,見笑了!

翻譯原文:

Function.apply and Function.call in JavaScript

第一段略。

每個JavaScript函數都會有很多附屬的(attached)方法,包括toString()、call()以及apply()。聽起來,你是否會感到奇怪,一個函數可能會有屬于它自己的方法,但是記住,JavaScript中的每個函數都是一個對象。看一下 這篇文章 ,復習一下(refresher)JavaScript特性。你可能還想知道JavaScript中函數和方法的區別。我認為“函數”和“方法”的描述,僅僅是JavaScript的習慣約定而已。函數立足于它們自己(例如:alert()),而方法是函數內部一個對象的屬性(dictionary),我們通過對象來調用方法。每個JavaScript對象都有一個toString()方法,下面通過代碼舉例說明,在一個函數對象中,我們可以使用toString()方法。

function foo(){

 alert('x');

}

alert(foo.toString());

因為函數都是對象,它們有自己的屬性和方法。我們可以把它們看作數據(data)。這篇文章,我們只關注兩個函數的方法apply()以及call()。

我們從下面的代碼開始:

var x = 10;

function f(){

 alert(this.x);

}

f();

我們定義了一個全局函數f()。f()通過this關鍵字訪問變量x,但是需要注意的是,我們不能通過一個對象的實例來調用這個函數。this指向的是什么對象呢?this會指向這個全局對象。我們的變量x就是在這個全局對象中定義的。上面的代碼能夠正常運行,運行結果會顯示一個對話框,對話框中顯示10。

我們可以通過this來調用call()和apply()。正如下面的例子展示如何使用call():

var x = 10;

var o = { x : 15};

function f(){

 alert(this.x);

}

f();

f.call(o);

首先調用f()將會顯示10的對話框,因為this這個時候指向的是全局對象。然后我們調用f函數的call()方法,傳入的參數是o,運行結果顯示的是o中x屬性的值15。call()方法會用它的第一個參數作為f函數的this指針。也就是說,我們會告訴運行時,f函數中的this指向的是哪個對象。

this跳轉聽起來有些滑稽,甚至對于C++、Java以及C#程序員來說有些反常。這些都是ECMAScript中有趣的部分。

通過call()也可以給函數傳遞參數:

var x = 10;

var o = { x : 15};

function f(){

 alert(this.x);

}

f();

f.call(o);

apply()和call()類似的,只是apply()要求第二個參數必須是一個數組。這個數組會作為參數傳遞給目標函數。

var x = 10;

var o = {x : 15};

function f(message) {

 alert(message);

 alert(this.x);

}

f('invoking f');

f.apply(o, ['invoking f through apply']);

apply()方法是很有用的,因為我們可以創建一個函數而不用去關心目標方法的參數。這個函數可以通過apply()的第二個數組參數來傳遞額外的參數給方法。

var o = {x : 15};

function f1(message1) {

 alert(message1 + this.x);

}

function f2(message1, message2) {

 alert(message1 + (this.x * this.x) + message2);

}

function g(object, func, args) {

 func.apply(object, args);

}

g(o, f1, ['the value of x = ']);

g(o, f2, ['the value of x squared = ', '. Wow!']);

這樣的語法有點問題。為了調用apply()方法,我們強制目標函數使用數組中的參數。幸運的是,有一個方法可以讓這種語法更簡單。在此之前,我們必須先介紹一個:參數標識符。

在JavaScript中,其實每個函數都有一個可變長度的參數列表。這意味著,即使一個函數只有一個參數的時候,我們也可以傳遞5個參數給它。下面的代碼不會有錯誤,而且結果顯示的是“H”。

function f(message) {

 alert(message);

}

f('H', 'e', 'l', 'l', 'o');

在f()中,如果我們不想去接受其他的參數,我們可以用關鍵字arguments。arguments代表一個參數對象,它有一個代表長度的屬性類似于數組。

function f(message) {

 // message的值和arguments[0]是一樣的

 for(var i = 1; i < arguments.length; i++){

  message += arguments[i];

 }

 alert(message);

}

// 結果顯示“Hello”

f('H', 'e', 'l', 'l', 'o');

你應該知道,嚴格來講,arguments不是一個數組。arguments有一個length屬性,但是沒有split、push、pop方法。在前面的g()函數中,我們可以從arguments中拷貝需要的參數,組成數組,然后把這個數組傳遞給apply()。

var o = {x : 15};

function f(message1, message2) {

 alert(message1 + ( this.x * this.x) + message2);

}

function g(object, func) {

 // arguments[0] = object

 // arguments[1] = func

 var args = [];

 for(var i = 2; i < arguments.length; i++) {

  args.push(arguments[i]);

 }

 func.apply(object, args);

}

g(o, f, 'The value of x squared = ', '. Wow!');

當我們調用g(),we can pass additional arguments as parameters instead of stuffing the arguments into an array。

更多信息請查看IT技術專欄

更多信息請查看網絡編程
易賢網手機網站地址:JavaScript中的apply和call函數詳解
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美一区二区三区四区在线观看地址 | 亚洲女同性videos| 久久精品国产99精品国产亚洲性色| 国产精品久久久久影院色老大 | 亚洲清纯自拍| 欧美国产视频日韩| 国产精品99久久久久久久久久久久 | 欧美性做爰毛片| 一本色道久久综合亚洲精品小说 | 亚洲日本va在线观看| 欧美日韩1234| 欧美一区二区视频在线| 在线免费观看日韩欧美| 女女同性精品视频| 亚洲一区亚洲二区| 亚洲国产成人av在线| 国产精品九九| 欧美sm极限捆绑bd| 香蕉国产精品偷在线观看不卡| 激情文学综合丁香| 欧美午夜精品理论片a级按摩| 久久高清福利视频| 一本久道久久综合婷婷鲸鱼| 国产日产欧美精品| 欧美日一区二区在线观看| 久久精品女人的天堂av| 99re6热只有精品免费观看| 国产在线国偷精品产拍免费yy| 国产综合久久| 国产精品扒开腿爽爽爽视频| 久久女同精品一区二区| 亚洲欧美日韩一区在线观看| 亚洲精品影视| 1000部精品久久久久久久久| 国产精品久久一区二区三区| 欧美国产一区视频在线观看 | 亚洲日产国产精品| 一区在线播放| 国内久久视频| 国产欧美日韩一区二区三区在线 | 美女视频黄免费的久久| 欧美一乱一性一交一视频| 日韩一级成人av| 亚洲国产mv| 国产一区二区三区视频在线观看 | 亚洲视频一区在线| 在线观看亚洲专区| 海角社区69精品视频| 国产日产欧美一区| 国产精品亚洲第一区在线暖暖韩国| 欧美电影在线观看完整版| 久久久久久电影| 久久青草久久| 欧美一二三视频| 午夜精品福利在线| 欧美一激情一区二区三区| 亚洲专区一区二区三区| 亚洲一区二区三区中文字幕在线| 国产精品99久久久久久久vr| 在线视频免费在线观看一区二区| 一区二区三区精品| 亚洲免费在线观看视频| 欧美一区二区精美| 久久亚洲精品一区二区| 欧美成人免费在线观看| 美日韩在线观看| 美女精品网站| 欧美—级高清免费播放| 欧美视频在线视频| 国产一二精品视频| 亚洲国产精品国自产拍av秋霞| 亚洲国产精品一区二区三区 | 极品尤物一区二区三区| 激情婷婷久久| 亚洲美女色禁图| 亚洲男人的天堂在线观看| 欧美一区二区三区的| 久久婷婷av| 欧美日韩性生活视频| 国产美女精品一区二区三区 | 亚洲欧美在线另类| 欧美影院视频| 欧美成人自拍| 国产精品国产三级国产专区53 | 久久婷婷国产麻豆91天堂| 欧美午夜性色大片在线观看| 国产精品美女久久久| 极品中文字幕一区| 日韩亚洲一区在线播放| 欧美在线免费视频| 欧美—级高清免费播放| 国产亚洲一区二区在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 日韩亚洲欧美成人| 久久精品国产精品| 欧美亚韩一区| 亚洲片在线观看| 久久gogo国模裸体人体| 欧美精品日韩| 一区二区三区在线免费观看 | 91久久精品视频| 亚洲欧美另类中文字幕| 免费日韩av电影| 国产女人精品视频| 日韩亚洲视频| 免费视频一区| 国产一区二区三区观看 | 欧美制服第一页| 欧美三级小说| 亚洲精品孕妇| 你懂的一区二区| 国产一区观看| 欧美一区成人| 国产精品久久国产三级国电话系列 | 久久久久久国产精品一区| 欧美日韩精品欧美日韩精品一| 红桃视频国产精品| 欧美亚洲在线播放| 国产精品日韩二区| 亚洲天堂网在线观看| 欧美精品日韩一区| 亚洲人成网站精品片在线观看| 久久久不卡网国产精品一区| 国产精品区一区二区三区| 亚洲图片欧美午夜| 国产精品久在线观看| 亚洲深夜福利在线| 欧美日韩一区综合| 一区二区三区四区五区在线| 欧美日韩成人综合在线一区二区 | 久久综合狠狠| 国产日韩精品在线| 亚洲欧美成人网| 国产精品豆花视频| 亚洲女人天堂成人av在线| 国产精品v欧美精品v日本精品动漫 | 欧美视频国产精品| 亚洲乱码精品一二三四区日韩在线 | 小嫩嫩精品导航| 国产精品久久久久国产a级| 一本一道久久综合狠狠老精东影业| 欧美电影电视剧在线观看| 亚洲激情第一区| 欧美日韩国产区一| 一区二区av| 国产精品一区二区在线观看不卡| 亚洲欧美激情一区二区| 国产精品亚发布| 久久久国产午夜精品| 国产在线播精品第三| 久久综合伊人| 日韩视频永久免费观看| 欧美视频一区二区三区…| 亚洲欧美中文日韩v在线观看| 国产一二三精品| 蜜桃av综合| 一区二区三区www| 国产欧亚日韩视频| 久久这里有精品15一区二区三区 | 亚洲一区二区黄| 国产模特精品视频久久久久| 久久亚洲捆绑美女| 亚洲一级黄色av| 激情久久一区| 欧美日韩午夜剧场| 久久国产婷婷国产香蕉| 亚洲国产一区二区a毛片| 欧美三级乱码| 久久蜜臀精品av| 亚洲一区二区三区精品动漫| 韩国三级电影久久久久久| 欧美日韩精品免费观看视频完整| 性色av香蕉一区二区| 91久久夜色精品国产网站| 国产日韩欧美一区二区| 欧美老女人xx| 久久综合久久久| 欧美专区第一页| 亚洲在线一区| 亚洲免费黄色| 亚洲成人自拍视频| 国产在线精品二区| 欧美日韩综合在线免费观看| 久久综合久久综合这里只有精品| 亚洲午夜高清视频| 91久久中文| 伊人久久婷婷| 国产精品尤物| 欧美午夜无遮挡| 欧美国产在线视频| 久久久最新网址| 亚洲欧美中文字幕| 亚洲精品国产系列| 在线观看不卡av| 狠狠噜噜久久| 国产一区白浆| 国产午夜亚洲精品羞羞网站| 国产美女高潮久久白浆| 欧美日韩一区二区精品| 欧美国产一区二区|