ECMA-262把对象定义为:“无序属性地集合,其属性可以包括基本值、对象或者函数”。对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值。正因为这样,我们可以把ECMAScript的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。
创建对象
每个对象都是基于一个引用类型创建的。
创建自定义对象的最简单方式就是创建一个Object的实例,然后再为它添加属性和方法,如下所示:
var person = new Object();
person.name = "Nicholas";
person.age = 29;
person.job = "Software Engineer";
person.sayName = function(){
alert(this.name)
};
person.sayName()
对象字面量
var person = {
name: 'Nicholas',
age: 29,
job: 'engineer',
sayName: function(){
alert(this.name)
}
};
以上这种创建新对象的方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码。为解决这个问题人们开始使用工厂模式的一种变体。
工厂模式
用函数来封装以特定接口创建对象的细节,如下面的例子所示:
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('jane','28','web-developer');
person1.sayName();
工厂模式,虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。又出现了一个新的模式。
