【js】函数的调用模式

函数模式:

特征:就是一个简单的函数调用,函数名前面没有任何的引导内容

<script>
    function foo(){}
    var func = function(){}
    foo();
    func();
    (function(){})();
</script>

this 在函数模式中的含义:  this在函数中表示全局对象,在浏览器中是window对象


方法模式:

特征: 方法一定是依附于一个对象, 将函数赋值给对象的一个属性, 那么就成为了方法

<script>
    function f() {
        this.method = function () {};
    }

    var o = {
        method: function () {}
    }
</script>

this 在方法模式调用中的含义: 表示函数所依附的这个对象


构造器调用模式:

由于构造函数只是给 this 添加成员. 没有做其他事情. 而方法也可以完成这个操作, 就 this 而言, 构造函数与方法没有本质区别.

特征:使用 new 关键字, 来引导构造函数.

<script>
    function Person(){
        this.name = "zhangsan";
        this.age = 19;
        this.sayHello = function(){
        };
    }
    var p = new Person();
</script>

构造函数中发 this 与方法中一样, 表示对象, 但是构造函数中的对象是刚刚创建出来的对象


上下文调用模式:

上下文(Context),就是函数调用所处的环境。上下文调用,也就是自定义设置this的含义。

在其他三种调用模式中,函数/方法在调用的时候,this的值都是指定好了的,我们没办法自己进行设置,如果尝试去给this赋值,会报错。


<script>
    //第一种, apply

    //函数名.apply(对象, [参数]);

    //第二种, call

    //函数名.call(对象, 参数);

    //上面两种方式的功能一模一样,只是在传递参数的时候有差异。
</script>


如果传入的是一个对象, 那么就相当于设置该函数中的 this 为参数

如果不传入参数, 或传入 null. undefiend 等, 那么相当于 this 默认为 window


<script>
    function foo(test) {
        console.log(test);
    }
    foo.apply( null ,["测试"]);

    foo.call( null ,"测试");
</script>


如果传入的是基本类型, 那么 this 就是基本类型对应的包装类型的引用
number -- Number
boolean -- Boolean
string -- String


  1. 语法中的函数名表示的就是函数本身,使用函数调用模式的时候,this默认是全局对象

  2. 语法中的函数名也可以是方法(如:obj.method),在使用方法模式调用的时候,this默认是指当前对象

  3. 在使用applycall的时候,默认的this都会失效,this的值由applycall的第一个参数决定


上下文调用模式的应用:

借用构造方法进行继承

<script>
    function Person ( name, age, gender ) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // 需要提供一个 Student 的构造函数创建学生对象
    // 学生也应该有 name, age, gender, 同时还需要有 course 课程
    function Student ( name, age, gender, course ) {
        Person.call( this, name, age, gender );
        //Person.apply(this,[name,age,gender]);
        this.course = course;
    }
</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值