【转】面向对象的程序设计——创建对象
定义:无序属性的集合,其属性可以包含基本值、对象或函数。
严格来讲就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。我们可以把对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。
每个对象都是基于一个引用类型创建的,这个引用类型可以是原生类型,也可以是开发人员定义的类型。
6.1创建对象
创建自定义兑现的最简单方式就是创建一个Object的实例,然后再为它添加属性和方法:
var person = new Object(); person.name = "wangxc"; person.age = 27; person.job = “newbie”; person.sayName = function(){ alert(this.name); }; person.sayName();
以上创建了一个名为person的对象,并为他添加了三个属性(name age job)和一个方法(sayName())。
这种方式有个明显的缺点:试用同一个接口创建很多对象,会产生大量的重复代码。为解决这个问题人们开始用工厂 模式的一种变体。
6.1.1 工厂模式
工厂模式抽象了创建具体对象的过程。考虑到在ECMAScript中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节:
function createPerson(name,age,obj){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); };
return o; }
var person1 = createPerson("wangxc",27,"newbie");
var person2 = createPerson("gangzai",28,“genius”);
person1.sayName(); // "wangxc"
person2.sayName(); // "gangzai"
函数createPerson()能根据接收的参数来构建一个包含所有必要信息的Person对象,可以无数次的调用这个函数,每次都会返回一个包含三个属性的一个方法的对象。
工厂模式虽然解决了创建多个相似对象的问题,但没有解决对象识别的问题(即怎样知道一个对象的类型)。后来出现了构造函数模式。
6.1.1 构造函数模式
构造函数可以用来创建特定类型的对象,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。
下面是用构造函数模式重写上面的例子:
function Person(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ alert(this.name); }; } var person1 = new Person("wangxc",27,"newbie"); var person2 = new Pweson("gangzai",28,"genius"); person1.sayName(); //"wangxc" person2.sayName(); //"gangzai"
浙公网安备 33010602011771号