麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

JavaScript 函數(shù)四種調(diào)用模式

2019-11-06 06:04:38
字體:
供稿:網(wǎng)友

函數(shù)有四種形態(tài)

-> 函數(shù)形態(tài)-> 方法形態(tài)-> 構(gòu)造器形態(tài)-> 上下文形態(tài)(call, apply)

函數(shù)的四種調(diào)用模式

所有的 this 都是由當(dāng)前函數(shù)決定,最終都是由函數(shù)的四種調(diào)用模式?jīng)Q定的。① 函數(shù)調(diào)用模式,只會執(zhí)行一段代碼,同時函數(shù)中的 this 是全局對象 window;返回值由return語句決定,如果沒有return語句就表示沒有返回值
function f1(){    console.log(this);}f1();//windowfunction f2(){    return function(){        console.log(this);    }}var f2n=f2();f2n();//this——>window,這也是一次函數(shù)調(diào)用模式function f3(){    f3n();//函數(shù)調(diào)用模式——————>window    function f3n(){        console.log(this);    }}f3();// window② 方法調(diào)用模式,只會執(zhí)行一段代碼,同時方法中的 this 是方法的所有者,即當(dāng)前的實例對象;返回值由 return 語句決定
//代碼1:var obj={    age:10,    say:function(){        console.log(this.age);    }};obj.say();//方法調(diào)用模式//代碼2:function f1(){    console.log(this);}var obj2={    s1:f1//將f1函數(shù)賦值給obj2.s1屬性};obj2.s1();//方法調(diào)用模式——>this:obj2//代碼3:var obj3={    age:10,    s1:function(){        console.log(this.age);    }};var obj4={    age:20,    s2:obj3.s1//將obj3.s1函數(shù)賦值給s2屬性};obj4.s2();//方法調(diào)用模式:this——>obj4③ 構(gòu)造器調(diào)用模式,會用來創(chuàng)建一個對象,還是執(zhí)行一段代碼,this 表示當(dāng)前對象返回值:   a. 沒有手動添加返回值,默認(rèn)返回 this   b. 返回了一個基本數(shù)據(jù)類型(number / boolean / string / null / undefined),最終返回 this   c. 返回了一個復(fù)雜數(shù)據(jù)類型(對象),最終返回該對象
//代碼1:function Person(){    this.age=20;    this.name="張三";    console.log(this);}//構(gòu)造函數(shù)調(diào)用模式:var p1=new Person();//代碼2;function P2(){    this.age=18;    return "abc";}var p2=new P2();//p2.age=18//代碼3:function P3(){    this.age=10;    return {};}var p3=new P3();//p3.age:undefinedconsole.log("p3.age");console.log(p3.age);//代碼4:function P4(){    this.age=10;    return [1,3,5];}var p4=new P4();//p4.age:undefinedconsole.log("p4.age");console.log(p4.age);④ 上下文調(diào)用模式,可以用參數(shù)來控制 this 的含義語法:        函數(shù).call(對象,參數(shù)列表)        函數(shù).apply(對象,參數(shù)數(shù)組)        call 和 apply 除了參數(shù)不同,功能完全相同this :    a. 傳遞一個 null / undefined ,this 指向 window    b. 傳遞一個 數(shù)字 / 字符串 / 布爾值,this 指向 對應(yīng)的基本包裝類型的對象(Number / String / Boolean)    c. 傳遞一個 對象:this 指向該對象返回值:由 return 語句決定例如調(diào)用 函數(shù) func 需要兩個參數(shù)func( 1, 2 )那么使用上下文調(diào)用的語法是func.call(obj, 1, 2);func.apply(obj, [1, 2]);apply 方法就是為了處理偽數(shù)組借用函數(shù)調(diào)用p.sayHello => p.sayHello.call(p)    p.sayHello.apply(p)
function f1(){    console.log(this);}//上下文模式f1.call(null);//windowf1.call(undefined);//windowf1.call(1);//Number的實例f1.call("abc");//String的實例f1.call(true);//Boolean的實例var s1="abc";console.log(s1.length);//3console.log(s1[0]);//"a"//代碼內(nèi)部創(chuàng)建了字符串所對應(yīng)的String構(gòu)造函數(shù)的實例//{0:"a",1:"b",2:"c",length:3}//代碼執(zhí)行完畢之后,就會把這個實例給銷毀練習(xí)題1:
function f1(){    this.length=5;    return function(a,b,c){        this.length=10;        return [1,3,5];    }}//構(gòu)造函數(shù)調(diào)用模式:var r1=new f1();//r1是函數(shù)console.log(r1.length);//任何函數(shù)都有一個length屬性表示形參的個數(shù):3//函數(shù)調(diào)用模式var r2=r1();//r2:[1,3,5]console.log(r2.length);//3//構(gòu)造函數(shù)調(diào)用模式var r3=new r1();//r3:[1,3,5]console.log(r3.length);//3練習(xí)題2:
var length = 10;function fn() {    console.log(this.length);}var obj = {    length: 5,    method: function (f) {        f();//f變量的值是fn函數(shù),但是這里是函數(shù)調(diào)用模式--->this:window————>window.length:10        arguments[0]();//方法調(diào)用模式,this:arguments——>arguments.length:2    }}obj.method(fn, 1);var o1={    0:function(){    },    say:function(){    }};o1[0]();//o1.0();//錯誤o1.say();o1["say"]();
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲国产网站 | 老司机一级毛片 | 一级成人免费 | 91精品久久久久久久久网影视 | 久久伊人国产精品 | 亚洲一级电影在线观看 | 中文字幕在线观看网址 | 午夜啪视频 | 亚洲九九爱 | 91不雅视频| 久久精品伊人网 | 欧美一级淫片a免费播放口 91九色蝌蚪国产 | 久久超 | www亚洲 | 亚洲一区二区三区四区精品 | 久久亚洲一区二区三区成人国产 | 色综合久久久久久久久久久 | 毛片网站视频 | 久久久久久久免费视频 | 午夜视频在线观 | 毛片中文字幕 | 成人福利视频导航 | 国产精品久久久久国产精品三级 | 91网视频 | 欧美成人毛片 | 亚洲午夜免费 | 中文字幕在线观看网址 | 国产瑟瑟视频 | 欧美成人免费电影 | 国产精品一品二区三区四区18 | 国产午夜精品一区二区三区免费 | 欧美成人精品欧美一级乱黄 | 欧美四级在线观看 | 国产成人精品区 | 成av在线 | 欧美日韩一区,二区,三区,久久精品 | 成年人在线视频 | 高清成人在线 | 欧美一级特黄aaaaaa在线看首页 | 老司机一级毛片 | 国产精品久久久久久久久久久久久久久久 |