1. Object构造函数创建
var Person = new Object();
Person.name = "Nike";
Person.age = 29;
上面的代码创建了Object引用类型的一个新实例,然后把实例保存在变量Person中。
2. 使用字面量创建
var Person = {}; //相当于 var Person = new Object();
var Person = {
name: 'Nike';
age: 29;
}
该方法创建对象的方式与第一种相同,只是写法不同。
前两种方法的缺点:都是用了同一个接口创建很多的对象,产生了大量重复的代码。
3. 工厂模式创建
function createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function() {
alert(this.name);
};
return o;
}
var person1 = createPerson("Nike", 29, "teacher");
var person2 = createPerson("Arvin", 20, "student");
该方法返回了一个对象,但无法判断该对象是什么类型。
4. 使用构造函数创建对象
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function() {
alert(this.name);
};
}
var person1 = new Person("Nike", 29, "teacher");
var person2 = new Person("Arvin", 20, "student");
该方法可以使用instanceof操作符检测对象类型:
alert(person1 instanceof Object); //ture
alert(person1 instanceof Person); //ture
alert(person2 instanceof Object); //ture
alert(person2 instanceof Object); //ture
缺点: 每个方法在每个实例上都要重新创建一遍,若方法很多会占用很多内存。
5. 原型对象模式创建
function Person() {}
Person.prototype.name = "Nike";
Person.prototype.age = 20;
Person.prototype.jbo = "teacher";
Person.prototype.sayName = function() {
alert(this.name);
};
var person1 = new Person();
person1.sayName();
使用该方法可以让所有的对象实例共享它所包含的属性和方法。
6. 组合使用构造函数模式和原型模式创建
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
}
Person.prototype = {
constructor: Person,
sayName: function() {
alert(this.name);
};
}
var person1 = new Person('Nike', 20, 'teacher');