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

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)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
国产免费观看久久黄| 国产免费成人| 日韩午夜精品| 国产精品日韩久久久| 激情久久久久| 久久夜色精品| 韩国美女久久| 亚洲欧美网站| 黄色精品一区| 欧美激情视频在线免费观看 欧美视频免费一 | 国产精品亚洲一区| 亚洲女同精品视频| 久久国产精品久久w女人spa| 国产欧美一区二区三区国产幕精品| 欧美伊久线香蕉线新在线| 黄色国产精品| 国产精品啊啊啊| 亚洲深夜福利网站| 国产精品视频网站| 久久视频一区| 亚洲精品偷拍| 国内精品视频在线观看| 欧美高清在线一区二区| 亚洲女优在线| 亚洲美女精品成人在线视频| 国产九九精品视频| 欧美精品尤物在线| 久久精品亚洲一区二区三区浴池| 亚洲国产成人不卡| 国产热re99久久6国产精品| 欧美日韩国产综合视频在线观看 | 亚洲人成亚洲人成在线观看图片 | 亚洲伊人观看| 黄色综合网站| 国产欧美一区二区三区在线老狼| 亚洲神马久久| 最近看过的日韩成人| 在线日韩av片| 在线成人av| 亚洲国产欧美一区二区三区久久| 国产久一道中文一区| 欧美日韩亚洲在线| 欧美日韩精品二区| 欧美日本韩国| 欧美日韩岛国| 国产精品swag| 国产精品一区二区女厕厕| 国产精品三级视频| 国产精品自拍小视频| 国产精品一区二区女厕厕| 国产麻豆精品久久一二三| 国产精品v片在线观看不卡| 欧美精品激情blacked18| 日韩视频二区| 91久久午夜| 亚洲一区二区三区精品在线观看| 性伦欧美刺激片在线观看| 久久嫩草精品久久久精品一 | 久久久av毛片精品| 欧美777四色影视在线| 欧美日韩专区| 美女脱光内衣内裤视频久久网站| 久久艳片www.17c.com| 欧美高清在线| 欧美日韩一区二| 国产乱码精品一区二区三| 亚洲区一区二| 亚洲视频二区| 欧美国产日本高清在线| 国产视频精品xxxx| 亚洲国产精品一区二区www| 亚洲视频免费| 免费成人你懂的| 国产综合香蕉五月婷在线| 亚洲卡通欧美制服中文| 久久aⅴ乱码一区二区三区| 国产精品jvid在线观看蜜臀| 亚洲国产一区二区三区高清| 亚洲综合另类| 国产精品免费视频观看| 亚洲私人黄色宅男| 欧美精品日本| 99综合精品| 欧美日韩国产综合视频在线观看中文| 在线观看福利一区| 先锋影院在线亚洲| 国产精品va在线播放我和闺蜜| 最新高清无码专区| 久久久久久国产精品mv| 国产精品yjizz| 亚洲片区在线| 欧美一级理论片| 欧美成年人网站| 国产精品自拍三区| 日韩一二三区视频| 日韩亚洲精品在线| 亚洲综合精品一区二区| 在线观看亚洲a| 欧美一级一区| 欧美日韩国产成人在线观看| 国产一区二区三区高清| 亚洲区国产区| 久久麻豆一区二区| 国产香蕉97碰碰久久人人| 亚洲经典自拍| 欧美h视频在线| 一区二区激情| 国产亚洲精久久久久久| 免费成人美女女| 中文欧美字幕免费| 国产精品国产三级国产aⅴ入口 | 黄色成人片子| 久久影院午夜片一区| 国内自拍一区| 久久国产黑丝| 久久综合伊人| 亚洲国产成人精品久久久国产成人一区| 久久精品理论片| 在线视频一区二区| 亚洲第一区色| 国产麻豆精品视频| 欧美福利电影在线观看| 久久精品亚洲| 中文一区二区| 国产日韩欧美中文| 久久综合色88| 亚洲制服av| 亚洲永久在线观看| 国产乱码精品1区2区3区| 欧美精品免费观看二区| 亚洲欧美另类在线| 一本一道久久综合狠狠老精东影业| 国产精品综合久久久| 欧美日韩综合精品| 欧美福利电影网| 欧美成人dvd在线视频| 日韩一区二区精品葵司在线| 在线观看一区欧美| 国产精品乱码人人做人人爱| 欧美日韩国产经典色站一区二区三区 | 在线观看成人网| 国产一区视频在线看| 久久亚洲精品伦理| 中文亚洲免费| 激情综合亚洲| 国产精品黄色| 国产免费成人av| 韩国av一区| 亚洲老司机av| 一本久道久久综合中文字幕| 在线综合亚洲| 久久青草欧美一区二区三区| 久久久夜夜夜| 国产精品wwwwww| 狠狠久久婷婷| 欧美一区二区三区免费视| 欧美国产综合| 亚洲黄一区二区| 美女国产一区| 亚洲国产精品t66y| 久久躁日日躁aaaaxxxx| 狠狠狠色丁香婷婷综合久久五月| 亚洲自拍偷拍麻豆| 国产精品va在线播放| 亚洲国产一区二区视频| 欧美成人一区二免费视频软件| 在线观看成人网| 欧美成年人视频网站| 最新热久久免费视频| 欧美成人自拍| 亚洲黄色在线观看| 欧美激情导航| 亚洲欧美日韩国产综合精品二区| 国产精品你懂的在线| 久久国产精品99久久久久久老狼 | 欧美淫片网站| 狠狠色综合色区| 你懂的成人av| 在线一区欧美| 国产字幕视频一区二区| 欧美激情一区在线观看| 亚洲欧美日本伦理| 黄色日韩网站视频| 欧美日韩一区二区视频在线观看 | 亚洲永久免费观看| 国语自产精品视频在线看抢先版结局| 久久久久久久久综合| 一区二区国产日产| 好男人免费精品视频| 欧美激情一区二区三区| 性欧美video另类hd性玩具| 亚洲国产日韩综合一区| 国产日韩一区二区三区在线| 欧美一区二区三区视频免费播放| 国产自产在线视频一区| 欧美激情第9页| 久久嫩草精品久久久精品| 亚洲国语精品自产拍在线观看| 欧美日韩一区二区视频在线| 久久国内精品视频|