黑铁时代
Programing is not only one kind of technology, but also one kind of art.

面向对象的语言(像Java,C#)都有一个类的概念,实例化的对象都是某个类的实例。但是ECMAScript没有类的概念,所以JavaScript的面向对象的实现和其他语言都有很大的不同。

 

最简单的创建对象的方法就是Object()构造函数:

  var person = new Object();

  person.name = 'Leo';

  person.age = '25';

  person.introduce = function() {

    alert ( 'Hello, my name is '+ this.name );  

  }

  person.introduce(); // 弹出 Hello, my name is Leo

上面的代码就可以创建一个person对象。我们先用new Object()的方法创建一个Ojbect类型的实例,Object对象是最基本的对象;然后我们为其添加了两个属性:name和age,还添加了一个方法introduce。当时这种方式的存在很大问题,当我们会有大量同一种对象的时候,我们需要写大量类似代码,非常不利于开发和代码维护。

 

工厂模式

  顾名思义,工厂模式就是将对象的当成工厂里面生产的产品,而参数就像是生产产品的原料,我们只需要将原料给工厂,工厂就会生产出我们想要的产品,即我们需要的对象。工厂某事可以封装对象的创建过程,不仅大大简化了开发,而且便于维护,当我们需要给对象添加新的属性的时候,只简答的需要修改工厂类就可以了。但是在JavaScript中,我们通常只需要用一个函数来实现工厂模式。

例子:

function createPerson( name, age ) {

  var person = new Object();

  person.name = name;

  person.age = age;

  person.introduce = function() {

    alert ( 'Hello, my name is '+ this.name );  

  }

  return person;

}

 

var p1 = createPerson( 'Leo', '25' );

var p2 = createPerson( 'Jack', '20' );

 

p1.introduce(); // Hello, my name is Leo

p2.introduce(); // Hello, my name is Jack

 是不是感觉工厂模式让创建对象变得很简单和方便了,虽然工厂模式解决了大量重复代码的问题,但是工厂模式依然存在一个问题就是无法知道对象的类型,因为所有对象都是Object类型。如果再写一个创建动物的工厂模式createAnimal,那么动物和人类一样都是Object类型了。当然会有其他方案来解决这个问题,下节继续介绍其他创建对象的方式。

posted on 2012-06-30 21:20  黑铁时代  阅读(227)  评论(0编辑  收藏  举报