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', '前端' );
“`