函数调用浅谈

前言

 

        最近在写代码的时候,有很多函数调用方面的思考,简单整理,个人学习

 

        核心思想来自以前看烂了的好书《JavaScript语言精髓》

 

正文

 

        调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数。除了声明时定义的形式参数,每一个函数接收两个附加的参数thisarguments

 

        关于this在下面四种函数调用方式中会主要介绍一下。

 

 

  • 方法调用模式
  • 函数调用模式
  • 构造器调用模式
  • apply和call调用模式(原书上没有加call,个人觉得加上比较好)
 
  1. 方法调用模式
       当一个函数被保存为一个对象的属性时候,称为一个方法。
       当一个方法被调用时候, this被绑定到该对象
 
var Obj = {
       value :0 ,
       increment : function(param){
                //对param进行非数字类型的默认值设置
                this.value += typeof param === 'number' ? param : 1;
       }
}

Obj.increment();    //没有传参 应该返回默认值1
console.log(Obj.value);  //1

Obj.increment(3);   //参数为3 数值型 进行+=操作
console.log(Obj.value);  //4

/*
使用了this去访问对象,能从对象中取值或修改对象
this可取得它们所属对象的上下文的方法称为公共方法
*/
 

 

   2. 函数调用模式

 

    当一个函数并非像上面一样作为一个对象的属性时候,它被当做一个函数来调用

 

 

function add(a,b){
    return a + b;
 }
var sum = add(5,6);  //sum 为11

/*
this被绑定到全局对象,这种方式的this也是一种被称为是一种错误的指向
严格上当内部函数被调用时候,此时的this应该仍然绑定到外部函数的this变量
当然很多api的做法多是定义一个变量并给它赋值this
var that = this;
*/

 

  3. 构造器调用模式

 

 

 

//创建一个名为Obj的构造器函数
var Obj = function(param){
      this.status = param;
}

//给Obj的所有实例提供一个getStatus的公共api
Obj.prototype.getStatus = function(){
      return this.status;
}

//构造一个Obj的实例
var obj = new Obj("over");
console.log(obj.getStatus());      //over

/*
结合new前缀调用的函数被称为构造器函数
它们存在以大写格式命名的变量里面
*/

 

 

 

  4. Apply|call调用模式

 

   这个还是比较常见的。使用原生支持的apply或者call(两个api区别可以参照我其他的文章)

 

function add(a,b){
    return a+b;
}
var arr = [2,3];

/*
apply(param1.param2)
@param1 ----被绑定的this对象
@param2 ----一个参数数组
*/
console.log(add.apply(null,arr));   //5

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值