在javascript中,对象的属性可以在对象创建后动态添加,所以可以如下定义(以船检mCar对象为例)
      var mCar=new Object;
      mCar.color="red";
      mCar.doors=4;
      mCar.showColor=function(){
     alert(this.color);
     };
   创建car对象,然后给他设置几个属性,但是可能需要创建多个car实例,这样问题就来了。要解决此问题就要创建并能返回特定类型的对象的工厂函数(factory function)。
  一,工厂方式
    function createCar(){
    var teCar=new Object;
teCar.color="red";
teCar.doors=4;
teCar.showColor=function(){
    alert(this.color);
    };
return teCar;
    }
  var mCar1=new createCar();
var mCar2=new createCar();
 上面所有的代码都包括到函数createCar()函数中,调用此函数时将创建不同版本的新对象。在这里实例mCar1和实例mCar2的属性一样,可以修改函数,给他传递各个属性的默认值:
function createCar(sColor,iDoors){
    var teCar=new Object;
teCar.color=sColor;
teCar.doors=iDoors;
teCar.showColor=function(){
    alert(this.color);
    };
return teCar;
    }
  var mCar1=new createCar("red",4);
var mCar2=new createCar("blue",3);
mCar1.showColor(); //outputs "red"
      上面的例子每次调用函数createCar(),都要创建新的函数showColor(),以为着每个对象都有自己的showColor()版本,实际是,每个对象都共享了同样的函数,所以可以在工厂函数外定义对象的方法,然后通过属性指向该方法,从而避开这个问题:
function showCorlor(){
alert(this.color);
}
function createCar(sColor,iDoors){
    var teCar=new Object;
teCar.color=sColor;
teCar.doors=iDoors;
teCar.showColor=showColor;
   
return teCar;
    }
  var mCar1=new createCar("red",4);
var mCar2=new createCar("blue",3);

二构造函数方式
 创建构造函数就想定义工厂函数一样容易。
function Car(sColor,iDoors){
this.color=sColor;
this.doors=iDoors;
this.showColor=function(){
    alert(this.color);
    };
}
var mCar1=new Car("red",4);
var mCar2=new Car("blue",3);
构造函数方式与工厂函数的区别是在构造函数内部五创建对象,而是使用this关键字,在使用new运算符调用构造函数时,在执行第一行代码前先创建一个对象,只有this才能访问这个对象。然后可以直接赋予this属性。默认情况下是构造函数的返回值(不必使用return);
就想工厂函数一样,构造函数也会重复生成函数,给每个对象都创建独立的函数版本,不过也可以想工厂函数那样,把函数写到构造函数的外面。
   

posted on 2008-01-16 15:10  ayajenson  阅读(345)  评论(0编辑  收藏  举报