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

JavaScript中的apply和call函數詳解
來源:易賢網 閱讀:1382 次 日期: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函數詳解
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
国产日韩一级二级三级| 欧美丝袜丝交足nylons图片| 欧美精选在线播放| 亚洲精品成人天堂一二三| 99久久精品免费看| 国产精品久久久久久户外露出| 处破女av一区二区| 一区二区三区波多野结衣在线观看 | 舔着乳尖日韩一区| 日韩精品中午字幕| 久久97超碰色| 亚洲日本丝袜连裤袜办公室| 欧美巨大另类极品videosbest| 日本网站在线观看一区二区三区| 久久奇米777| 欧美日韩亚洲综合在线 | 福利一区福利二区| 悠悠色在线精品| 精品成人一区二区三区| av在线播放成人| 蜜臀国产一区二区三区在线播放| 欧美激情一区二区三区全黄 | 在线观看亚洲a| 韩国一区二区三区| 亚洲精品水蜜桃| 精品国产乱码久久久久久夜甘婷婷| 成人网在线播放| 免费一级欧美片在线观看| 国产精品乱子久久久久| 欧美一区二区精美| 欧美图区在线视频| 成人免费看片app下载| 丝袜美腿高跟呻吟高潮一区| 国产精品成人网| 欧美精品一区二区三区高清aⅴ | 理论片日本一区| 亚洲精选视频免费看| 久久九九久久九九| 欧美一级黄色大片| 色拍拍在线精品视频8848| 成人app软件下载大全免费| 久久 天天综合| 天天爽夜夜爽夜夜爽精品视频| 国产精品对白交换视频| 中日韩免费视频中文字幕| 日韩精品在线一区二区| 欧美日韩精品综合在线| 91麻豆精品一区二区三区| 国产精品一二一区| 黄色精品一二区| 麻豆精品在线播放| 午夜久久久久久电影| 亚洲黄色小说网站| 亚洲精品va在线观看| 中文字幕一区在线| 中文字幕一区二区三区四区| 国产精品三级电影| 国产精品免费免费| 中文字幕一区av| 亚洲色图欧洲色图婷婷| 亚洲欧美国产高清| 香蕉成人啪国产精品视频综合网 | 偷拍与自拍一区| 手机精品视频在线观看| 免费国产亚洲视频| 看片网站欧美日韩| 国产一区二区三区蝌蚪| 国内外精品视频| 成人午夜视频免费看| 91免费视频观看| 在线观看一区二区视频| 91麻豆精品国产91久久久使用方法 | 国产成人欧美日韩在线电影| 岛国一区二区三区| 色综合久久久久综合体| 欧洲一区二区三区免费视频| 在线播放91灌醉迷j高跟美女 | 国产欧美日本一区视频| 国产精品毛片无遮挡高清| 自拍偷拍欧美精品| 亚洲高清视频在线| 久久国产精品露脸对白| 国产乱码精品一区二区三区忘忧草 | 欧美一级日韩一级| 国产亚洲精品免费| 亚洲午夜三级在线| 久久精品免费观看| 色综合天天综合给合国产| 欧美日韩一区精品| 久久午夜国产精品| 亚洲一区在线观看免费 | 日韩精品一级二级| 国产美女在线观看一区| 99国产一区二区三精品乱码| 欧美日本视频在线| 国产精品久久久久久久久果冻传媒| 亚洲第一久久影院| 国产精品性做久久久久久| 在线免费亚洲电影| 国产亚洲一区二区在线观看| 亚洲一区二区三区精品在线| 国产乱淫av一区二区三区| 欧美在线一区二区| 国产欧美日韩综合精品一区二区| 亚洲愉拍自拍另类高清精品| 粉嫩蜜臀av国产精品网站| 欧美日韩大陆一区二区| 国产精品久久久久久久久免费相片| 日韩中文字幕1| 91麻豆视频网站| 国产精品―色哟哟| 国产精品夜夜爽| 精品国产乱码久久| 亚洲风情在线资源站| 97se亚洲国产综合自在线| 精品免费一区二区三区| 亚洲小说欧美激情另类| 色妹子一区二区| 国产精品你懂的| 国产成人综合亚洲网站| 日韩精品资源二区在线| 日日骚欧美日韩| 555www色欧美视频| 亚洲成人激情社区| 欧洲一区在线观看| 伊人一区二区三区| 一本在线高清不卡dvd| 国产精品美女久久久久aⅴ| 成人av影视在线观看| 国产网红主播福利一区二区| 国内外成人在线| 精品国产乱码久久久久久闺蜜 | 国产河南妇女毛片精品久久久| 日韩欧美中文字幕精品| 日韩精品国产欧美| 欧美一区二区三区视频在线观看 | 亚洲男同性视频| 色综合久久综合网欧美综合网 | 成人午夜免费视频| 亚洲欧美电影一区二区| 色综合天天做天天爱| 午夜婷婷国产麻豆精品| 日韩欧美专区在线| 国产精品资源在线观看| 国产精品久久久久久亚洲伦| 91麻豆免费视频| 日本女人一区二区三区| 久久夜色精品一区| 99视频超级精品| 亚洲va欧美va国产va天堂影院| 欧美一区二区在线不卡| 国内精品不卡在线| 国产精品免费视频网站| 欧美日韩免费一区二区三区| 奇米精品一区二区三区在线观看一| 在线不卡中文字幕| 国产v日产∨综合v精品视频| 亚洲乱码日产精品bd| 67194成人在线观看| 国产精品一区专区| 亚洲免费观看高清完整版在线观看 | 欧美大胆人体bbbb| 成人黄色网址在线观看| 亚洲午夜激情av| 日韩欧美在线影院| 成熟亚洲日本毛茸茸凸凹| 午夜电影一区二区| 久久精品视频一区二区三区| 福利一区在线观看| 日本系列欧美系列| 久久久久久久电影| 777久久久精品| 99精品久久只有精品| 国产米奇在线777精品观看| 亚洲免费伊人电影| 国产日韩欧美激情| 日韩欧美激情在线| 色婷婷久久99综合精品jk白丝| 蜜桃一区二区三区四区| 亚洲欧美一区二区不卡| 欧美va亚洲va国产综合| 一个色综合av| 日本一区二区视频在线| 国产宾馆实践打屁股91| 亚洲成人一区二区| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美亚洲精品一区| 国产成人午夜精品影院观看视频 | 成人精品国产一区二区4080| 亚洲色欲色欲www| 日韩亚洲电影在线| 在线欧美日韩国产| 色综合天天综合网国产成人综合天| 麻豆精品国产传媒mv男同| 一区二区三区久久| 国产精品久久三| 中文字幕色av一区二区三区| 国产欧美日韩三区| 欧美精品一区二区久久婷婷| 欧美精品欧美精品系列|