在 js 中 无论是函数, 还是方法, 还是事件, 还是构造器, ... 其本质都是函数. 只是处在不同的位子而已.
四种:
- 函数模式
- 方法模式
- 构造器模式
- 上下文模式
函数模式
特征: 就是一个简单的函数调用. 函数名的前面没有任何引导内容.
function foo () {}
var func = function () {};
...
foo();
func();
(function (){})();
this 的含义: 在 函数中 this 表示全局对象, 在浏览器中是 window
方法模式
特征: 方法一定是依附于一个对象, 将函数赋值给对象的一个属性, 那么就成为了方法.
function f() {
this.method = function () {};
}
var o = {
method: function () {}
}
this 的含义: 这个依附的对象.
构造器调用模式
创建对象的时候 构造函数做了什么?
由于构造函数只是给 this 添加成员. 没有做其他事情. 而方法也可以完成这个操作, 就 this 而言,
构造函数与方法没有本质区别.
特征:
- 使用 new 关键字, 来引导构造函数.
- 构造函数中发 this 与方法中一样, 表示对象, 但是构造函数中的对象是刚刚创建出来的对象
- 构造函数中不需要 return, 就会默认的 return this
补充:
- 如果手动的添加 return, 就相当于 return this
- 如果手动的添加 return 基本类型; 无效, 还是保留原来 返回 this
- 如果手动添加 return null; 或 return undefiend, 无效
- 如果手动添加 return 对象类型; 那么原来创建的 this 就会被丢掉, 返回的是 return 后面的对象
创建对象的模式
- 工厂方法
// 工厂就是用来生产的, 因此如果函数创建对象并返回, 就称该函数为工厂函数
function createPerson( name, age, gender ) {
var o = {};
o.name = name;
o.age = age;
o.gender = gender;
return o;
}
// document.createElement()
- 构造方法
- 寄生式创建对象
// 外表看起来就是构造方法, 但是本质不是的构造方法创建对象的方式
function createPerson( name, age, gender ) {
var o = {};
o.name = name;
o.age = age;
o.gender = gender;
return o;
}
var p = new createPerson( 'jim', 19, 'male' );