js创建对象

 //定义一个apple对象的构造函数  
 function Apple{  
     this.color='red';  
 }  
 //创建一个apple对象  
 var apple1 = new Apple();  
 //我还可以这么创建apple对象  
 var apple2 = {  
  color:'red';  
 }  
 这两个apple对象在内存中都是完全一样的。只不过js提供了两种创建方式而已。 

 

1、工厂方式:

function createCar(colors,doors){
	var tempCar = new object();
	tempCar.colors = colors;
	tempCar.doors = doors;
	tempCar.showColor = function showColor(){
		alert(this.color);
	};
}

 缺点:不像常用的面向对象声明的方式;每声明一个Car实例,就要创建多一个showColor函数,不能复用,浪费内存

 

2、构造函数的方式:

function Car(colors,doors){
	this.colors = colors;
	this.doors = doors;
	this.showColor = function showColor(){
		alert(this.color);
}

 优点:以更面向对象的方式
 缺点:每声明一个Car实例,就要创建多一个showColor函数,不能复用,浪费内存。


3、prototype原形的方式:
//首先定义构造函数

function Car(){

}
Car.prototype.colors = "red";
Car.prototype.doors = 4;
Car.prototype.showColor = function(){
	alert(this.colors);
};

 //以上面的定义原形创建Car
var car1 = new Car();
var car2 = new Car();

优点:重用代码,car1.showColor,car2.showColor指向的是同一个函数位置。
缺点:构造函数没有参数,不能在调用构造函数时,自定义自己的Car。
注:这个缺点可以这样解决:var car1 = new Car();声明后,再指定它自己的字段和方法:car1.doors = 6;
也可以改变方法指针指向另一个方法:car1.showColor = changeColor;


综合解决以上问题的方法:
4、联合使用构造函数和原形方式:

function Car(colors,doors){
	this.colors = colors;
	this.doors = doors;
}
Car.prototype.showColor = function showColor(){
	alert(this.color);
};
var car1 = new Car("red",4);
var car2 = new Car("blue",6);

 优点:这样一来便很好地解决了上面的问题,在调用构造函数时,自定义自己的Car;也解决了方法复用的问题。

 

prototype就是“一个给类的对象添加方法的方法”,使用prototype属性,可以给类动态地添加方法。
当你用prototype编写一个类后,如果new一个新的对象,浏览器会自动把prototype中的内容替你附加在对象上。这样,通过利用prototype就可以在JavaScript中实现成员函数的定义,甚至是“继承”的效果。

 

 

http://blog.csdn.net/xiaoyuemian/archive/2009/01/20/3844305.aspx

 

function Hotel () {
		this.hotelName = "";
		this.hotelId = "";
		this.star = "";
		this.city = "";
		this.zone = "";
		this.rooms = [];		
	}

	// get and set zone
	Hotel.prototype.setZone = function (zone) {
		this.zone = zone;	
	};
	
	Hotel.prototype.getZone = function () {
		return this.zone;	
	};

        Hotel.prototype.setRooms = function (room) {
		this.rooms[this.rooms.length] = room;
	};
	
	Hotel.prototype.getRooms = function (idx) {
		return (idx >= 0 && idx < this.rooms.length) ? this.rooms[idx] : "";
	};

 

 

 

1、

for(var i=0; i<recordList.length; i++){
        fileCtrl.addFileList.push(recordList[i]);
        fileCtrl.currFileList.push(recordList[i]);
    }
    alert(JSON.stringify(fileCtrl));
 

2、

var fileObjArr = [];
var length = _tr.length;
_tr.not(":first").each(function(i){
    var qFile = new EipQuestionFile();
    qFile.setFileCode(filecode);
    qFile.setRemark(remark);
    fileObjArr[fileObjArr.length] = qFile;
});
$("#uploadFileList").val(JSON.stringify(fileObjArr));
    //否则无法讲其作为Str传输过去

function EipQuestionFile(){
    this.fileCode = '';
    this.remark = '';           
}
EipQuestionFile.prototype.setFileCode = function (fileCode) {
    this.fileCode = fileCode;   
};
EipQuestionFile.prototype.setRemark    = function(remark){
    this.remark = remark;
}

 ..

 

 

你可能感兴趣的:(JavaScript,编程,.net,Blog,prototype)