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

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

版權所有:易賢網

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲高清免费在线| 中文字幕中文字幕在线一区 | 欧美日韩一区二区三区免费看| 国产成人av一区| 丰满少妇在线播放bd日韩电影| 日韩精彩视频在线观看| 亚洲一区二区五区| 亚洲精品成人天堂一二三| 国产三级精品三级| 久久蜜桃一区二区| 欧美日韩亚洲国产综合| 一本久久综合亚洲鲁鲁五月天| 美女视频网站黄色亚洲| 人人狠狠综合久久亚洲| 蜜臀av性久久久久av蜜臀妖精| 三级影片在线观看欧美日韩一区二区| 亚洲国产日韩精品| 亚洲午夜精品在线| 亚欧色一区w666天堂| 亚洲国产精品久久艾草纯爱| 亚洲一区二区偷拍精品| 亚洲成人777| 日韩av不卡在线观看| 日本系列欧美系列| 久久成人av少妇免费| 国产一区二区三区| 成人性视频网站| gogo大胆日本视频一区| 色婷婷亚洲精品| 欧美巨大另类极品videosbest | 国产精品国产馆在线真实露脸 | 蓝色福利精品导航| 国精品**一区二区三区在线蜜桃| 麻豆精品视频在线观看视频| 国产一区二区不卡| 99国产精品99久久久久久| 色一区在线观看| 欧美一区二区三区在线看| 精品久久久久av影院| 国产日韩欧美精品一区| 亚洲美女淫视频| 日韩成人免费电影| 国产福利视频一区二区三区| 色婷婷综合久久久中文字幕| 欧美在线视频不卡| 欧美精品一区二区三区蜜桃| 中文字幕国产一区| 无码av中文一区二区三区桃花岛| 极品尤物av久久免费看| 99久久99久久精品国产片果冻 | 色婷婷一区二区三区四区| 欧美精品第1页| 国产精品系列在线| 香蕉久久一区二区不卡无毒影院 | 91精品办公室少妇高潮对白| 在线观看视频一区二区欧美日韩| 日韩欧美一级二级三级久久久| 欧美国产综合一区二区| 午夜一区二区三区视频| 成人免费av网站| 26uuu精品一区二区| 亚洲国产欧美在线人成| 国产精品亚洲第一 | 亚洲一区二区三区国产| 精品亚洲porn| 欧美亚洲图片小说| 国产欧美精品一区| 精品一区精品二区高清| 日本精品一区二区三区高清| 久久久三级国产网站| 午夜精品123| 91精彩视频在线观看| 中文字幕一区二| 国产一区二区三区四区五区美女| 欧美日韩在线播放三区四区| 亚洲欧美综合色| 国产精品一区免费在线观看| 日韩免费观看高清完整版在线观看| 日本不卡视频在线| 欧美性videosxxxxx| 综合久久久久久| 成人动漫一区二区三区| 精品成a人在线观看| 久久99国产精品久久99| 日韩一本二本av| 日av在线不卡| 精品日韩欧美在线| 性欧美疯狂xxxxbbbb| 99视频精品在线| 国产精品午夜在线观看| 懂色av中文字幕一区二区三区 | 国产亚洲污的网站| 午夜精品久久久久久久久久久| 日本高清不卡aⅴ免费网站| 精品久久免费看| 久久99久久久欧美国产| 91精品久久久久久久99蜜桃| 亚洲国产精品一区二区www在线| 国产麻豆成人精品| 久久嫩草精品久久久精品| 天堂va蜜桃一区二区三区漫画版 | 亚洲色图制服丝袜| 欧美又粗又大又爽| 亚洲第一会所有码转帖| 67194成人在线观看| 日韩精品91亚洲二区在线观看| 4438成人网| 久久97超碰国产精品超碰| 久久久久国产精品厨房| 丁香婷婷深情五月亚洲| 成人欧美一区二区三区| 欧美性高清videossexo| 久久99久久精品| 国产精品国产三级国产普通话三级| 99国产一区二区三精品乱码| 亚洲精品中文在线影院| 日韩一级黄色片| 国产a级毛片一区| 一区二区三区高清在线| 欧美一级日韩不卡播放免费| 欧美a级一区二区| www成人在线观看| 99久久伊人精品| 日韩1区2区3区| 欧美激情在线看| 欧美日韩国产综合草草| 激情深爱一区二区| 亚洲精品乱码久久久久久久久| 欧美一二三四在线| 91小视频免费观看| 奇米四色…亚洲| 自拍av一区二区三区| 日韩免费一区二区| 色综合天天综合网天天狠天天| 美女一区二区久久| 一区二区三区在线观看欧美| 精品久久久久久综合日本欧美| 成人av小说网| 久久精品国产亚洲aⅴ| 亚洲色图清纯唯美| 久久众筹精品私拍模特| 色88888久久久久久影院按摩| 国产在线国偷精品免费看| 亚洲一区二区三区四区五区黄 | 国产福利一区在线观看| 日韩中文字幕1| 一区二区三区视频在线观看| 久久综合九色综合97婷婷| 欧美男男青年gay1069videost| 福利一区二区在线| 国产精品综合久久| 日韩高清在线观看| 亚洲成人动漫在线观看| 国产精品高清亚洲| 久久美女艺术照精彩视频福利播放| av不卡免费电影| 懂色av中文一区二区三区 | 91看片淫黄大片一级在线观看| 日一区二区三区| 中文字幕在线一区免费| 成人毛片视频在线观看| 成人ar影院免费观看视频| 国产成人av一区| 成人一区二区三区| 成人美女在线观看| 成人免费毛片a| 国精品**一区二区三区在线蜜桃| 激情成人午夜视频| 伦理电影国产精品| 九九久久精品视频| 国内精品国产成人国产三级粉色 | 日韩欧美视频一区| 91精品国产一区二区三区 | 欧美精品久久天天躁| 欧美喷潮久久久xxxxx| 欧美日韩国产精品自在自线| 欧美另类变人与禽xxxxx| 欧美日韩免费观看一区二区三区| 欧美亚洲动漫精品| 欧美日本一道本| 日韩欧美久久一区| 日韩精品一区二区三区中文精品| 欧美一区二区啪啪| 欧美变态口味重另类| 久久精品视频免费| 中日韩免费视频中文字幕| 国产精品色呦呦| 亚洲专区一二三| 日本特黄久久久高潮| 日韩国产在线观看| 奇米色一区二区| 成人黄色777网| 777久久久精品| 精品1区2区在线观看| 国产欧美一区二区精品久导航| 国产精品久久久久影院色老大| 国产精品国产三级国产普通话三级| 亚洲综合色视频| 精品一区二区三区免费观看| 成人看片黄a免费看在线|