javascript函数的四种调用模式及参数this的取值

引言:我没有系统的学习过javascript,对this的取值分不清楚,对工作中造成很大的困难,对自己的不信心等奋斗


javascript函数调用模式分为四种:方法调用模式,函数调用模式,构造器调用模式,Apply调用模式。


1.方法调用模式

当一个函数作为一个对象的属性时,我们称它为为一个方法。当一个方法被调用时,this被绑到到该对象。

eg:

var obj = {
     name:'joe',
     getName:function(){
          return this.name;  //this指的就是obj对象
     }
}
obj.getName(); //joe
方法可以使用this访问自己所属的对象,所以它能从对象中取值或对对象进行修改;


2.函数调用模式

当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用时:

var sum = add(1,2); //3

以此模式调用函数时,this被绑定为全局对象。

var obj = {
        value:'123',
        double:function(){
            console.log(this);//obj
            var that = this;
            var helper = function(){
                  console.log(this);//window
                that.value = add(that.value,that.value);
            }
            helper();
        }
    };
    obj.double();

3.构造器调用模式

当一个函数前面带上new来调用,那么背地里将会创建一个连接到该函数的prototype成员的新对象,同时this会绑定到那个新对象上。

var Quo = function(a){
        this.status = a;
    };

    Quo.prototype.getStatus = function(){
        return this.status;
    }

    var myQuo = new Quo('joe');
    console.log(myQuo.getStatus());//joe

一个函数,如果创建的目的就是希望结合new前缀来调用,那它就被称为构造器函数,按照约定,它们保存在以大写格式命名的变量里。

一般不推荐使用这个方法。


4.Apply调用模式

apply方法让我们构建一个参数数组传递给调用函数。它也允许我们选择this的值。apply方法接受俩个参数,第一个是要绑定给this的值,第二个就是一个参数数组。

var statusObject = {
        status:'A-OK'
    };

    var status = Quo.prototype.getStatus.apply(statusObject);//'A-OK'
apply把this指向了statusObject对象,所以函数getStatus()this.status就是statusObject.status;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值