`
uule
  • 浏览: 6348911 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

js创建对象

    博客分类:
  • 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;
}

 ..

 

JS中创建对象的几种常用方法:

1. 简单对象字面量

这是最简单的创建对象的方法,也是经常在入门书籍中看到的方法:

//创建一个简单对象字面量
var person = {};    

// 加入属性和方法
person.name = 'ifcode';
person.setName = function(theName) {
   person.name = theName;
}

非常简单,但一般情况下不推荐这种方法。JS good parts书中认为这种写法可读性不够强,作者推荐的是后面一种写法。

2. 嵌套对象字面量

JS good parts中推荐这种写法:

var person = {
    name: 'ifcode',
    setName: function(theName) {
        this.name = theName;
    }
}

这种写法可读性很强,person对象的所有属性和方法都包含在其身体内,先的一目了然。

以上两种写法适用于只存在一个实例的对象,也就是某种意义上的singlton pattern

下面介绍的几种方法比较适用于创建多个对象实例。

3. 简单构造函数

构造函数一般都符合factory pattern,根据默认的规则,构造函数应当首字母大写:

Person = function(defaultName) {
    this.name = defaultName;
    this.setName = function(theName) {
        this.name = theName;
    }
}

person = new Person('ifcode');

利用构造函数就可以方便地创建多个对象实例了。

4. 使用原型(prototype)的构造函数

这里简单回顾一下prototype的作用。prototype或许是某种意义上最接近传统OOP中class的东西了。所有创建在prototype上得属性和方法,都将被所有对象实例分享。

Person = function(defaultName) {
    this.name = defaultName;
}

Person.prototype.setName = function(theName) {
    this.name = theName;
}

其实创建对象的方法还有很多,这些过于灵活的方法也是许多人在初接触JS时感到困惑的原因。我个人比较偏向2和4:单一实例用2,多个实例用4。

 

=====================================================================

Form获取值:

 

function setData(){
			var data = $("#uploadTestForm").serializeArray();
			var o={};
			$.each(data, function() {
		        if (o[this.name]!=undefined) {
		            o[this.name].push(this.value || '');
		        } else {
		            o[this.name] = [ this.value || '' ];
		        }
		    	
		    });
		    
		    var newArr = [];
		    var nType = o.nType;
			var strName = o.strName;
			var strUrl = o.strUrl;
			var nAuthenticationPlanTestId = o.nAuthenticationPlanTestId;
		    for(var i in nType){
				var obj = {};
				obj.nType = nType[i];
				obj.strName = strName[i];
				obj.strUrl = strUrl[i];
				obj.nAuthenticationPlanTestId = nAuthenticationPlanTestId[0];
				newArr.push(obj);
			}
			return newArr;
		}

 

$.fn.serializeObject2 = function() {
						    var o = {};
						    var a = this.serializeArray();
						    $.each(a, function() {
						    	var index = this.name.lastIndexOf(".");
						    	if(index != -1){
						    		this.name = this.name.substring(index+1,this.name.length);
							        if (o[this.name]!=undefined) {
							            o[this.name].push(this.value || '');
							        } else {
							            o[this.name] = [ this.value || '' ];
							        }
						    	}
						    });
						    return o;
						};
						
					  	function setData2(form){
					  		var datas = $(form).serializeObject2();
					  		console.log(datas);
						  		var planData = re.data;
						  		var dataList = [];
						  		for(var i=0;i<planData.length;i++){
						  			if(planData[i].level!=0){
						  				planData[i]._index = i;
						  				dataList.push(planData[i]);
						  			}
						  		}
						  		var nDataId = datas.nDataId;
						  		for(var j=0;j<dataList.length;j++){
						  			for(var n=0;n<nDataId.length;n++){
						  				if(dataList[j].id==nDataId[n]){
						  					planData[dataList[j]._index].strntent = datas.strContent[n];
								  			planData[dataList[j]._index].dtPDate = datas.dtPreDate[n];
								  			planData[dataList[j]._index].nAssierId = datas.nAssignUserId[n];
								  			planData[dataList[j]._index].strAserName = datas.strAssignUserName[n];
								  			planData[dataList[j]._index].strRarks = datas.strRemarks[n];
						  				}
						  			}
						  		}
						  		re.data = planData;
					  	}

 

。。。

 

 

 

 

 

分享到:
评论

相关推荐

    javascript创建对象的方式(二)

    这篇博客“javascript创建对象的方式(二)”可能详细介绍了在JavaScript中除了最基础的字面量语法之外的其他创建对象的方法。这里我们将深入探讨几种常见的创建对象的方式。 1. **构造函数**: JavaScript中的...

    javascript创建对象的方式(一)

    这篇博文主要探讨了JavaScript创建对象的几种常见方式,这对于理解和掌握JavaScript面向对象编程至关重要。在实际开发中,了解并灵活运用这些方法能够提高代码的可读性和可维护性。下面,我们将详细讲解标题中提到的...

    JavaScript创建对象的七种方式(推荐)

    JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产。接下来介绍七种非常经典的创建对象的方式,他们也各有优缺点。 ...

    javascript创建对象的方式(四)

    本文将深入探讨四种主要的JavaScript创建对象的方法,帮助你更好地理解和运用这些技巧。 1. **字面量语法(Literal Notation)** 字面量语法是最简单直接的创建对象的方式。它允许你在一行代码中创建一个对象,...

    javascript如何创建对象

    JavaScript创建对象的方法主要有以下几种: 一、直接创建 直接创建是通过new Object()来创建一个新的空对象,然后逐步给这个对象添加属性和方法。例如,创建一个名为person1的对象,并添加name、gender属性,以及一...

    javascript创建对象的方式(三)

    在JavaScript这门动态类型的编程语言中,创建对象是其核心特性之一。本文将详细探讨三种主要的创建JavaScript对象的方法,并结合“源码”与“工具”的概念,来深入理解这些方式在实际开发中的应用。 一、字面量...

    在js中创建类和对象

    本文将详细介绍几种常见的创建对象的方法,包括它们的特点和优缺点。 5.1 工厂方法 工厂方法是一种创建对象的模式,通过一个函数来创建具有特定属性和行为的对象。在JavaScript中,我们可以定义一个函数,如`...

    JS 创建对象(常见的几种方法)

    JavaScript作为一门面向对象的脚本语言,其创建对象的方式多种多样,每种方式都有其独特的特点和适用场景。下面我们逐一分析给定文件中所提到的几种创建对象的方法。 首先是使用构造函数模式创建对象。构造函数是...

    js创建对象的几种方式

    1.new Object() 2.字面量创建对象 构造函数创建对象 工厂模式

    【JavaScript源代码】详解js创建对象的几种方式和对象方法.docx

    本文将深入探讨JavaScript中创建对象的几种常见方式以及对象方法。 首先,我们来看“工厂模式”。工厂模式是一种创建对象的抽象方式,通过一个函数来返回一个新的对象。例如: ```javascript function getObj(name...

    javascript创建对象的3种方法

    总结来说,JavaScript创建对象的方法有多种,每种都有其适用的场景。JSON对象适合临时使用,`Object`实例适合简单场景,而构造函数及原型链则更适合构建复杂的、可复用的对象模型。在实际开发中,应根据项目需求选择...

    js创建对象的几种常用方式小结(推荐)

    本文将详细介绍JavaScript创建对象的几种常见方式,以及它们的优缺点。 首先,我们来看**工厂模式**。这种方式通过一个函数来创建对象,它能创建具有相同属性和方法的对象。然而,工厂模式的缺点在于它没有明显的...

    JS创建对象的几中方式

    在JavaScript中,创建对象有多种方法,每种方式都有其优缺点。以下是对这些方法的详细解释: 1. **工厂方式**: 工厂函数是通过一个函数来创建对象,它可以根据需要设置属性和方法。然而,这种方法的缺点是每个...

    js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式).docx

    ### JavaScript面向对象之常见创建对象的方式 #### 引言 JavaScript 的灵活性体现在其创建对象的多种方式上。本文将详细介绍三种常见的对象创建方法:工厂模式、构造函数模式以及原型模式,并探讨它们各自的优缺点...

    Javascript创建自定义对象 创建Object实例添加属性和方法

    如下所示: 代码如下: var person...上面的例子创建了一个名为person的对象,并为它添加了三个属性(name、age和job)和一个方法(sayName())。其中,sayName()方法用于显示this.name()的值。早期的JavaScript开发人员

    js创建对象几种方式的优缺点对比

    本文将探讨JavaScript创建对象的几种常见方式,并分析它们的优缺点。 1. **工厂模式** 工厂模式通过一个函数来创建对象,如示例中的`createObj`函数。这种模式的优点是简单易懂,可以方便地创建具有相同属性和方法...

    js 面向对象实例

    综合以上知识,`js 面向对象实例`涵盖了JavaScript中的面向对象编程基础,以及如何将这些概念应用到HTML5 Canvas的实践中。通过学习和实践这个实例,你不仅可以理解JavaScript的OOP机制,还能掌握如何利用Canvas API...

Global site tag (gtag.js) - Google Analytics