中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Javascript 的caller,callee,call,apply怎么使用

發布時間:2021-12-03 16:15:03 來源:億速云 閱讀:141 作者:iii 欄目:編程語言

本篇內容主要講解“Javascript 的caller,callee,call,apply怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Javascript 的caller,callee,call,apply怎么使用”吧!

1、caller

JScript參考中說明為:返回一個對函數的引用,該函數調用了當前函數。如何理解這句話, 先來舉個簡單的例子:
// caller demo {function callerDemo() {	if (callerDemo.caller) {		var a= callerDemo.caller.toString();		alert(a);	} else {		alert("this is a top function");	}}function handleCaller() {	callerDemo();}
上面的例子,可以看出,它就是返回一個調用數據的引用。(指向請求調用的函數) 也由此可以看出,當在這樣的情況下,

2、callee

JScript參考中的說明為:返回正被執行的 Function 對象,也就是所指定的 Function 對象的正文。

需要注意的是callee擁有length屬性,這個在有的時候用于驗證還是比較好的。

function calleeDemo() {	alert(arguments.callee);}function calleeLengthDemo(arg1, arg2) {	if (arguments.length==arguments.callee.length) {		window.alert("驗證形參和實參長度正確!");		return;	} else {		alert("實參長度:" +arguments.length);		alert("形參長度: " +arguments.callee.length);	}}		
從上面的例子可以看出,callee可以用來打在執行函數,也就是指向被調用的函數。上面的例子就說明calee可以打印其本身,當然還有其它的一些用途。而length屬性中arguments.length是實參長度,arguments.callee.length是形參長度,由此可以判斷調用時形參長度是否和實參長度一致。

3、call 和 apply

call方法JScript參考中的說明:調用一個對象的一個方法,以另一個對象替換當前對象。call([thisObj[,arg1[, arg2[, [,.argN]]]]]),但是沒有示例
apply方法JScript參考中的說明:應用某一對象的一個方法,用另一個對象替換當前對象。apply([thisObj[,argArray]])
實際上這兩個的作用幾乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg參數可以是變量,而apply([thisObj[,argArray]])中的參數為數組集合。下面來看看call, apply的具體應用
// simple call demofunction simpleCallDemo(arg) {	window.alert(arg);}function handleSPC(arg) {	simpleCallDemo.call(this, arg);}// simple apply demofunction simpleApplyDemo(arg) {	window.alert(arg);}function handleSPA(arg) {	simpleApplyDemo.apply(this, arguments);}	
從上面簡單的例子可以看出,call和apply可以把當前的參數傳遞給另外一個函數的參數中,從而調用另一個函數的應用。有的時候這是一個很實用的方法,當然,用call或是apply(是參數或是數組),看實際情況而定了。
下面來看另一個應用
call和apply還有一個技巧在里面,就是用call和apply應用另一個函數(類)以后,當前的函數(類)就具備了另一個函數(類)的方法或者是屬性,這也可以稱之為“繼承”。看下面示例。
// inheritfunction base() {	this.member = "never-online";	this.method = function() {		window.alert(this.member);	}}function extend() {	base.call(this);	window.alert(member);	window.alert(this.method);}	
上面的例子可以看出,通過call之后,extend可以繼承到base的方法和屬性。
再看一個apply的應用
// advanced apply demofunction adApplyDemo(x) {	return ("this is never-online, BlueDestiny '" + x + "' demo");}function handleAdApplyDemo(obj, fname, before) {  var oldFunc = obj[fname];  obj[fname] = function() {    return oldFunc.apply(this, before(arguments));  };}function hellowordFunc(args) {  args[0] = "hello " + args[0];  return args;}function applyBefore() {	alert(adApplyDemo("world"));}function applyAfter() {	handleAdApplyDemo(this, "adApplyDemo", hellowordFunc);	alert(adApplyDemo("world")); // Hello world!}	
需要注意的是,要先點"原始的adApplyDemo('world')"按鈕,如果先點"應用后的adApplyDemo('world')"按扭,會先應用了apply方法,這樣原始的值將會被改變。或許有的朋友沒有發現有什么特別的,我在這里指明一下,當點擊左邊的按扭時,只有"this is never-online, BlueDestiny 'world' demo", 當點擊右邊的按扭后,會現結果是"this is never-online, BlueDestiny 'hello world' demo",再點點左邊的按扭,看看結果又會是什么呢?自己試試看:D,已經改寫了函數adApplyDemo。這個例子則說明了call和apply的“真正”作用了。
到此,相信大家對“Javascript 的caller,callee,call,apply怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗山县| 康马县| 华容县| 兴仁县| 日土县| 宁乡县| 怀柔区| 洪雅县| 兰溪市| 潼关县| 绍兴市| 新宁县| 建水县| 高碑店市| 合江县| 娱乐| 临汾市| 邵阳县| 平果县| 资源县| 东方市| 尼勒克县| 永年县| 锡林浩特市| 莒南县| 泰和县| 磐安县| 张家口市| 曲周县| 福贡县| 星子县| 文水县| 张掖市| 浙江省| 敖汉旗| 宣威市| 台州市| 皋兰县| 章丘市| 伊吾县| 大洼县|