电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JavaScript直接調用函數與call調用的區別實例分析

瀏覽:6日期:2023-10-26 09:53:35

本文實例講述了JavaScript直接調用函數與call調用的區別。分享給大家供大家參考,具體如下:

直接調用

直接調用函數是最常見 最普通的方式,直接以函數附加的對象作為調用者, 在函數后括號內傳入參數來調用函數

例如:

window.alert('測試代碼');

其中調用者如果是window可以省略, 即直接alert('測試代碼');

以call() 方法調用函數

語法:call([thisObject[,arg1 [,arg2 [,...,argn]]]]);

新同學看來好像直接調用就夠了, 其實不然, 直接調用函數方式簡單易用但不夠靈活, 有些時候調用函數時需要動態地傳入一個函數的引用,此時為了動態地調用函數,就需要使用call方法來調用了

舉個例子:

<script type='text/javascript'>var each =function(array,fn){ for(var index in array) { fn.call(null,index,array[index]); }}each([4,20,3],function (index,ele){ document.write('第'+index+'個元素是'+ele+'<br/>');} );</script>

乍看可能比較暈, 注意fn.call語句, call調用的格式是在參數第一個填調用者,后邊按順序輸入參數, 參數形式比較特別, 與直接調用不同,調用者不寫在前面, 而是參數第一項. 格式: fn.call(obj,args);

看到這里大家應該會有疑問, call到底和直接調用有什么區別, 區別就在于call調用修改了this指針的指向, 如果被調用的函數里壓根沒用到this也就沒有什么區別了

再舉一個被調用函數有this指針的例子:

var x = '我是全局變量';//定義全局變量xfunction a(){ //定義函數類結構a  this.x = '我是在函數類結構a中聲明的哦';}//定義普通函數,彈出當前指針所包含的變量x的值function f(){ alert (this.x);}//返回值為“我是在函數類結構a中聲明的哦”f.call(new a());

我的理解是,f.call(new a())就是把函數(其實也是對象)f復制到被調用對象“new a()”下面去解析,事實上和下面這段代碼的解析結果一樣:

function a(){this.x = '我是在函數類結構a中聲明的哦';alert(this.x);}a();

事實上,是在調用f.call()的時候,修改了f()中的this指向。本來,f中的this.a,this.b屬性都是自身的,但是通過f.call()調用時,傳入了一個新的對象e()(this),這樣,將e綁定到了f的this中,本來是給f增加的屬性,加到了e中。(e與e(),f與f()都是等價的)有點類似于“繼承”,但是這個應該叫 JS中對象冒充

以apply()方式調用函數

apply() 方法與call()方法的功能節本相似 ,都可以用來動態地調用函數. apply()與call()的區別如下:

通過call()調用函數時必須在括號中詳細地列出每個參數 apply()動態地調用函數時, 需要以數組的形式一次性傳入所有調用參數

語法:apply([thisObj [,argArray] ]);

比如下面的兩個語句是相等的:

myfun.call(window,12,13);myfun.capply(window,[12,13]);

修改this指針這點上,apply()與call()也保持一致,

大體上來說apply()與call()只在傳參形式上有些差別而已.

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容可查看本站專題:《JavaScript常用函數技巧匯總》、《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 亚克力制品定制,上海嘉定有机玻璃加工制作生产厂家—官网 | 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 成人纸尿裤,成人尿不湿,成人护理垫-山东康舜日用品有限公司 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 真空吸污车_高压清洗车厂家-程力专用汽车股份有限公司官网 | 重庆波纹管|重庆钢带管|重庆塑钢管|重庆联进管道有限公司 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | 托盘租赁_塑料托盘租赁_托盘出租_栈板出租_青岛托盘租赁-优胜必达 | Brotu | 关注AI,Web3.0,VR/AR,GPT,元宇宙区块链数字产业 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 冷油器-冷油器换管改造-连云港灵动列管式冷油器生产厂家 | 棕刚玉_白刚玉_铝酸钙-锐石新材料 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 斗式提升机,斗式提升机厂家-淄博宏建机械有限公司 | 合肥风管加工厂-安徽螺旋/不锈钢风管-通风管道加工厂家-安徽风之范 | 宜兴紫砂壶知识分享 - 宜兴壶人| 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | 多功能真空滤油机_润滑油全自动滤油机_高效真空滤油机价格-重庆润华通驰 | 影视模板素材_原创专业影视实拍视频素材-8k像素素材网 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 全自动变压器变比组别测试仪-手持式直流电阻测试仪-上海来扬电气 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 阜阳在线-阜阳综合门户| 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 爱德华真空泵油/罗茨泵维修,爱发科-比其尔产品供应东莞/杭州/上海等全国各地 | 济南画室培训-美术高考培训-山东艺霖艺术培训画室 |