对象定义:无序属性的集合,其属性可以包含基本值、对象或者函数。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。
几种创建对象的方法:
1、Object的实例:
var person = new Object();
person.name = "Nichol";
person.age = 29;
person.job = "Software Engineer";
person.sayName = function() {
alert(this.name);
};
2、对象字面量:
//对象字面量
var person = {
name: "Nichol",
age: 29,
job: "Sfwore Engineer",
sayName: function() {
alert(this.name);
}
}
使用Object构造函数或对象字面量的方式有个明显的缺点:使用同一个接口创建很多对象的时候,很产生大量的代码。
3.工厂模式:
//工厂模式
function creatPerson(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 = creatPerson("He", 29, "Softwarer");
var person2 = creatPerson("Wang", 27, "Doctor");
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("He", 29, "Softwarer");
var person2 = new Person("Wang", 27, "Doctor");
不同之处:
1、 没有显式地创建对象;
2、直接将属性和方法赋给了this对象 ;
3、 没有return语句;
5、原型模式:
//原型模式
function Person() {
}
Person.prototype.name = "He";
Person.prototype.age = 29;
person.prototype.job = "Sofwarer";
person.prototype.sayName = function() {
alert(this.name);
}
var person1 = new Person();
person1.sayName();
var person2 = new Person();
person2.sayName();
alert(person1.sayName == person2.sayName); //true
我们直接将方法和所有的属性都添加到了Person的prototype的属性中,构造函数变成了空函数。