一、工厂模式
function person(name, age) {
var a = new Object();
a.name = name;
a.age = age;
a.sayName = function() {
alert(this.name)
}
return a;
}
person("zhangsan", 20);
工厂模式的出现解决了重复通过字面量创建的方式
二、构造函数
function Person(name, age) {
this.name = name;
this.age = age;
this.sayName = function() {
alert(this.name);
}
}
var person1 = new Person("zhangsan", 20);
构造函数的出现简化工厂模式:
1.没有显示创建对象的过程;
2.没有return返回;
3.执行环境的this指向构造函数的实例,将属性和方法赋给this对象;
三、原型模式
创建的函数都有prototype属性(原型),这个属性其实是一个指针,指向一个原型对象,当我们通过构造函数new一个实例对象的时候,其实这个新创建对象的方法和属性都可以从prototype获取,原型对象最大的好处就是共享。
function Person() {}
Person.prototype.name = "zhangsan";
Person.prototype.age = "20";
Person.prototype.sayName = function() {
alert(this.name);
}
优点:相比于构造函数和工厂模式,原型模式创建的属性和方法都是在原型对象上的,所以在new更多的实例对象,他的属性和方法都是一个,避免了构造函数实例对象时都重新创建一个方法;
缺点:创建的属性和方法都是固定的,会带来不便;
四、组合方法
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayName = function() {
alert(this.name);
}
现阶段用的最多的方式