首页 > 语言 > JavaScript > 正文

JavaScript中创建对象的7种模式详解

2024-05-06 15:10:59
字体:
来源:转载
供稿:网友

ECMA-262把对象定义为:”无需属性的集合,其属性可以包含基本值、对象或者函数。”严格来讲,这就相当于说明对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。正因为这样,我们可以把ECMAScript的对象想象成散列表:无非就是一组名对值,其中值可以是数据或函数。

创建自定义对象最简单的方式就是创建一个Object的实例,然后再为他添加属性和方法,如下所示:

var person = new Object();、person.name = "liubei";person.age = 29;person.job = "shayemuyou";person.sayName = function(){  alert(this.name);}

上面的例子创建了一个名为person的对象,并为他添加了三个属性和一个方法。其中sayName()方法用于显示name属性,this.name将被解析为person.name,早期的开发人员经常使用这个模式来创建对象,后来对象字面量的方法成了创建对象的首选模式,上面的例子用对象字面量的语法可以写成如下这样:

var person = {  name:"liubei",  age:29,  job:"shayemuyou",  sayName:function(){   alert(this.name);  }}

这个例子中的person对象和前面的对象是一样的,都有相同的属性和方法。

虽然Object构造函数或者对象字面量的方法都可以用来创建单个对象,但是这些方法有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码。为了解决这个方法,人们开始使用工厂模式的一种变体。

一、工厂模式

工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程。考虑到ECMAScript中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节,如下所示:

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("wei",25,"software");var person2 = createPerson("bu",25,"software");

函数createPerson()能够根据接受的参数来构建一个包含所有必要信息的Person对象。可以多次调用这个函数,每次都会返回一个包含三个属性一个方法的对象。工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题,即怎么样知道这是哪个对象类型。

二、构造函数模式

像Array、Object这样的原生构造函数,在运行时会自动出现在执行环境中。此外,我们可以创建自定义个构造函数,从而定义自定义类型的属性和方法。例如,我们可以使用构造函数重写上个例子:

function Person(name, age, job){  this.name = name; this.age = age; this.job = job; this.sayName = function(){     alert(this.name);   }}var person1 = new Person("wei",25,"software");var person2 = new Person("bu",25,"software");            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选