【转】面向对象的程序设计——创建对象

定义:无序属性的集合,其属性可以包含基本值、对象或函数。

严格来讲就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。我们可以把对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。

每个对象都是基于一个引用类型创建的,这个引用类型可以是原生类型,也可以是开发人员定义的类型。

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"

 

posted on 2018-01-15 16:27  henji1122  阅读(105)  评论(0)    收藏  举报

导航