日期:2014-05-16  浏览次数:20472 次

JS类的创建
1、工厂方式:创建能创建并返回特定类型的工厂函数creator:
  如:
function createCar(sColor,iDoors,iMpg){
    var oTempCar = new Object();
    oTmepCar.color = sColor;
    oTmepCar.doors= iDoors;
    oTmepCar.mpg= iMpg;
    oTmepCar.showColor = funtion (){
        alert (this.color);
    };
    return oTempCar;
}

var oCar1 = createCar('red',4,23);
var oCar1 = createCar('blue',3,25);
oCar1.showColor();
oCar2.showColor();


2、构造函数方式:创建一个构造函数(构造函数的首字母大写)
  如:
function Car(sColor,iDoors,iMpg){
    this.color = sColor;
    this.doors= iDoors;
    this.mpg= iMpg;
    this.showColor = function (){
        alert(this.color);
    }
}
var oCar1 = new Car('red',3,25);
var oCar2 = new Car('blue',5,25);


注:以上两种方式在创建对象时,对于可以共享的showColor()方法均进行了创建,也即有多少个对象便创建了多少个方法;

3、原型方式:该方式利用了对象的prototype属性,可以把它看成是创建新对象所依赖的原型。这种可以削除了上述不足,但是它只能在对象创建完成之后才能更改对象的属性,并且由于所创建的对象中的属性对于对象的引用,使得改变其中一个由对象创建的属性,其它的由此方法创建的对象的属性也会发生改变。如下例中的drivers,是Array对象的引用,所以当oCar1的drivers改变时,oCar2的drivers也会发生改变;
如:
function Car(){}
Car.prototype.color = 'red';
Car.prototype.doors = '4';
Car.prototype.mpg = '25';
Car.prototype.drivers = new Array('a','b');
Car.prototype.showColor = function (){
    alert(this.color);
};
var oCar1 = new Car();
var oCar2 = new Car();


4、混合的构造函数/原型方式:该方法结合了构造函数和原型方式的优点;
  如:
function Car(sColor,iDoors,iMpg){
    this.color = sColor;
    this.doors = iDoors;
    this.mpg = iMpg;
    this.drivers = new Array('a','b');
}
Car.prototype.showColor = function (){
    alert(this.color);
}
var oCar1 = new Car('red',3,25);
var oCar2 = new Car('blue',5,25);


5、动态原型方法(推荐方法):该方法通过检测对象否已经被创建决定是否创建相应函数。
如:
function Car(sColor,iDoors,iMpg){
    this.color = sColor;
    this.doors = iDoors;
    this.mpg = iMpg;
    this.drivers = new Array('a','b');
    if(typeof Car._initialized == "undefined"){
        Car.prototype.showColor = function (){
            alert(this.color);
        }
        Car._initialized = true;
    }
}