您的位置:首页 > 其它

函数的四种调用模式

2017-03-25 00:59 337 查看
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', '前端' );


“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 对象