1.工厂方式
function createCar(sColor, iDoors, iMpg){
var oTempCar= new Object();
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = function(){
alert(this.color);
};
return oTempCar;
}
这种方式是先建一个对象,再给它加属性和方法。
缺点:每次 var oCar1 = create("red",4,23);的时候都要从新创建新的showColor 函数,这样就以为这每个对象都有自己的函数。
解决的方法:
function showColor(){
alert(this.color);
}
function createCar(sColor, iDoors, iMpg){
var oTempCar= new Object();
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
return oTempCar;
}
ps:这样写看起来好丑,不象一个对象了。
2.构造函数方法
function Car(sColor, iDoors, iMpg){
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.showColor = function(){
alert(this.color);
};
}
ps:默认是返回this,所以没必要写return this;
缺点:创建对象的时候也要不停的创建新的函数showColor
3.原型方式
function Car(){
}
Car.prototype.color = "red";
Car.prototype.dorrs = 4;
Car.prototype.mpg =23;
Car.prototype.showColor = function(){
alert(this.color);
};
Car.prototype.drivers = new Array("Mile","Sue");
var oCar1 = new Car();
var oCar2 = new Car();
oCar1.drivers.push("Matt");
alert(oCar1.drivers); //输出"Mike,Sue,Matt"
alert(oCar2.drivers); //输出"Mike,Sue,Matt"
缺点:构造函数没参数;当属心为对象时候,所有被实力化的Car的对象属性都一样!
4.混合的构造函数/原型方式
用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)
function Car(sColor,iDoors,iMpg){
this.Color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike","Sue");
}
Car.prototype.showColor = function(){
alert(this.color);
};
这样问题就都解决了,不过OOPer决定它不完美
5.动态原型方法
function Car(sColor,iDoors,iMpg){
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike","Sue");
if(typeof Car._initialized == "undefined"){
Car.prototype.showColor = function(){
alert(this.color);
};
Car._initialized = true;
}
}
这样所有问题都解决并且向个正真的对象了
6。混合工厂方式
function Car(){
var oTempCar = new Object;
oTempCar.color = "red";
oTempCar.doors = 4;
oTempCar.mpg = 23;
oTemp.showColor = function(){
alert(this.color)
};
return oTempCar;
}
这种方式通常是在不能应用前一种方式时的变通方式。创建假构造函数,返回另一种对象的新实例。
总结:目前用的最多的是混合的构造函数/原型方式,此外动态原型也很流行,不咬单独使用经典的构造函数或原型方式,这样的代码会有问题。
function createCar(sColor, iDoors, iMpg){
var oTempCar= new Object();
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = function(){
alert(this.color);
};
return oTempCar;
}
这种方式是先建一个对象,再给它加属性和方法。
缺点:每次 var oCar1 = create("red",4,23);的时候都要从新创建新的showColor 函数,这样就以为这每个对象都有自己的函数。
解决的方法:
function showColor(){
alert(this.color);
}
function createCar(sColor, iDoors, iMpg){
var oTempCar= new Object();
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
return oTempCar;
}
ps:这样写看起来好丑,不象一个对象了。
2.构造函数方法
function Car(sColor, iDoors, iMpg){
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.showColor = function(){
alert(this.color);
};
}
ps:默认是返回this,所以没必要写return this;
缺点:创建对象的时候也要不停的创建新的函数showColor
3.原型方式
function Car(){
}
Car.prototype.color = "red";
Car.prototype.dorrs = 4;
Car.prototype.mpg =23;
Car.prototype.showColor = function(){
alert(this.color);
};
Car.prototype.drivers = new Array("Mile","Sue");
var oCar1 = new Car();
var oCar2 = new Car();
oCar1.drivers.push("Matt");
alert(oCar1.drivers); //输出"Mike,Sue,Matt"
alert(oCar2.drivers); //输出"Mike,Sue,Matt"
缺点:构造函数没参数;当属心为对象时候,所有被实力化的Car的对象属性都一样!
4.混合的构造函数/原型方式
用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)
function Car(sColor,iDoors,iMpg){
this.Color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike","Sue");
}
Car.prototype.showColor = function(){
alert(this.color);
};
这样问题就都解决了,不过OOPer决定它不完美
5.动态原型方法
function Car(sColor,iDoors,iMpg){
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike","Sue");
if(typeof Car._initialized == "undefined"){
Car.prototype.showColor = function(){
alert(this.color);
};
Car._initialized = true;
}
}
这样所有问题都解决并且向个正真的对象了
6。混合工厂方式
function Car(){
var oTempCar = new Object;
oTempCar.color = "red";
oTempCar.doors = 4;
oTempCar.mpg = 23;
oTemp.showColor = function(){
alert(this.color)
};
return oTempCar;
}
这种方式通常是在不能应用前一种方式时的变通方式。创建假构造函数,返回另一种对象的新实例。
总结:目前用的最多的是混合的构造函数/原型方式,此外动态原型也很流行,不咬单独使用经典的构造函数或原型方式,这样的代码会有问题。