1. 构造函数模式
function Foo(arg) {
this.xxx = arg;
this.xxx = xxx;
}
构造函数模式的函数体在每次new对象的时候都会执行一遍. new的话, 会自身创建一个作用域, 里面的this指向这个, 若是没有new, 直接执行, 那this得根据具体执行上下文确定. 这种方法会导致方法具有多个实例, 浪费内存.
2. 原型模式
function Foo() {
}
Foo.prototype = {
xxx: xxx,
xxx: xxx
}
原型模式相对于构造模式来说是没有构造参数的. 而且这种方法不具有实例私有的属性.
3. 构造函数模式和原型模式两者适用范围与组合使用
最好两者结合适用, 构造函数模式负责创建实例属性, 原型模式负责创建方法和共享的属性, 这样能最大限度节省内存.
4. 寄生构造函数模式
这种方法说白了就是在构造函数模式上寄生了原型模式, 通过判断是否已存在某个原型属性, 来判断是否需要执行原型初始化.
function Person(name) {
this.name = name;
if(typeof this.sayName != 'function') {
Person.prototype.sayName = function () {
alert(this.name);
}
}
}