函数的四种调用模式

1.函数模式

  • 函数的定义方式
    • 声明式
    • 表达式
    • Function
  • 单独独立调用的就是函数模式
    • 函数名( 参数 )
  • this 表示全局对象
  • 任何自调用函数都是函数模式

2.方法模式

  • 区分
    • 方法本身就是函数, 但是方法不是单独独立的调用, 而是通过一个对象引导调用.
  • this 表示引导方法的对象

比如:

var length = 10;
    function fn() {
        console.log( this.length );
    }
    var obj = {
        length: 5,
        method: function ( fn ) {
            fn();  //函数模式
            arguments[ 0 ]();  //方法模式 === method.fn()
        }
    };
    obj.method( fn, 1 ); //方法模式

3.构造器模式

  • 区分
    • 使用 new 关键字引导
  • 执行步骤
var p = new Person();
        new 是一个运算符, 专门用来申请创建对象, 创建出来的对象传递给构造函数的 this
        利用构造函数对其初始化

        function Person () {
            this.name = 'jim',
            this.age = 19;
            this.gender = 'male';
        }

 - ```
 - 返回值
     - 如果不写 return 语句, 那么 构造函数 默认返回 this
     - 如果在构造函数中写上 return 语句, 并紧跟基本类型( return num, return 1223 ). 则忽略返回类型. 
     - 如果在构造函数中写上 return 语句, 并且紧跟引用类型, 那么构造函数返回该引用类型数据, 而忽略 this
 - 如果调用构造函数的时候, 构造函数没有参数, 圆括号是可以省略的 - -自己感觉不推荐,毕竟代码的规范性
     - var p = new Person;

**4.上下文模式**


 - 语法(区分)
     - call 形式   ===   函数名.call( ... )
     - apply 形式   === 函数名.apply( ... )
 - 使用 apply 进行调用, 如果函数是带有参数的. apply 的第一个参数要么是 null 要么是对象
 - **如果是 null 就是函数调用, 如果是 对象就是 方法对象, 该对象就是宿主对象, 后面紧跟一个数组参数, 将函数的参数依次放在数组中.**
 - call 的不同在于,传入参数的不同,call是不需要数组进行传参



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

function Student ( name, age, gender, course ) {

    Person.call( this, name, age, gender );
    // 把person构造函数的方法属性,给this使用,即Student
    this.course = course;
}

var p = new Student ( 'jim', 19, 'male', '前端' );

“`

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值