函数的四种调用模式

1.函数调用模式

  //所有的this都是由当前函数决定——>最终都是由函数的4种钓调用模式决定的


    //代码1:
    function f1(){
        console.log(this);
    }
    //1、把f1函数当成普通函数调用:函数调用模式
    //      函数调用模式:
    //            a、this指向widow,
    //            b、返回值由return语句决定,如果没有return语句就表示没有返回值
    f1();//window



    //代码2:
    function f2(){
        return function(){
            console.log(this);
        }
    }
    var f2n=f2();
    f2n();//this——>window这也是一次函数调用模式



    //代码3:
    function f3(){
        f3n();//函数调用模式——————>window
        function f3n(){
            console.log(this);
        }
    }
    f3();

2.方法调用模式

//方法调用模式:
    //      this:指向调用该方法的对象
    //      返回值:由return语句决定

    //代码1:
    var obj={
        age:10,
        say:function(){
            console.log(this.age);
        }
    };
    obj.say();//方法调用模式

    //代码2:
    function f1(){
        console.log(this);
    }

    var obj2={
        s1:f1//将f1函数的值赋值给obj2.s1属性
    };
    obj2.s1();//方法调用模式——>this:obj2

    //代码3:
    var obj3={
        age:10,
        s1:function(){
            console.log(this.age);
        }
    };
    var obj4={
        age:20,
        s2:obj3.s1//将obj3.s1函数的值赋值给s2属性
    };
    obj4.s2();//方法调用模式:this——>obj4




//    function f5(){
//    }
//    var a1=f5();//undefeind
//    var a2=f5;//a2是一个函数             

3.构造函数调用模式

//构造函数调用模式:
    //      this:指向构造函数的实例
    //      返回值:
    //          a、没有手动添加返回值,默认返回this
    //          b、return了一个基本数据类型(数字、布尔值、字符串、null、undefined),最终返回this
    //          c、return了一个复杂数据类型(对象),最终返回该对象

    //代码1:
    function Person(){
        this.age=20;
        this.name="张三";
        console.log(this);
    }
    //构造函数调用模式:
    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:undefined
    console.log("p3.age");
    console.log(p3.age);

    //代码4:
    function P4(){
        this.age=10;
        return [1,3,5];
    }
    var p4=new P4();//p4.age:undefined
    console.log("p4.age");
    console.log(p4.age);


4.上下文调用模式

 //上下文模式
    //      this:
    //          传递一个null/undefined————————>window
    //          传递一个数字、字符串、布尔值——————>对应的基本包装类型的对象
    //          传递一个对象:指向该对象
    //      返回值:由return语句决定

    function f1(){
        console.log(this);
    }
    //上下文模式
    f1.call(null);//window
    f1.call(undefined);//window
    f1.call(1);//Number的实例
    f1.call("abc");//String的实例
    f1.call(true);//Boolean的实例



    var s1="abc";
    console.log(s1.length);//3
    console.log(s1[0]);//"a"
    //      31行代码内部创建了字符串所对应的String构造函数的实例
    //                          {0:"a",1:"b",2:"c",length:3}
    //      31行代码执行完毕之后,就会把这个实例给销毁        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值