欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS类的创建

程序员文章站 2024-02-20 20:16:10
...
1、[b]工厂方式[/b]:创建能创建并返回特定类型的工厂函数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、[b]构造函数方式[/b]:创建一个构造函数(构造函数的首字母大写)
  如:
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、[b]原型方式[/b]:该方式利用了对象的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、[b]混合的构造函数/原型方式[/b]:该方法结合了构造函数和原型方式的优点;
  如:
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、[b]动态原型方法(推荐方法)[/b]:该方法通过检测对象否已经被创建决定是否创建相应函数。
如:
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;
}
}