//定义一个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中除了最基础的字面量语法之外的其他创建对象的方法。这里我们将深入探讨几种常见的创建对象的方式。 1. **构造函数**: JavaScript中的...
这篇博文主要探讨了JavaScript创建对象的几种常见方式,这对于理解和掌握JavaScript面向对象编程至关重要。在实际开发中,了解并灵活运用这些方法能够提高代码的可读性和可维护性。下面,我们将详细讲解标题中提到的...
JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产。接下来介绍七种非常经典的创建对象的方式,他们也各有优缺点。 ...
本文将深入探讨四种主要的JavaScript创建对象的方法,帮助你更好地理解和运用这些技巧。 1. **字面量语法(Literal Notation)** 字面量语法是最简单直接的创建对象的方式。它允许你在一行代码中创建一个对象,...
JavaScript创建对象的方法主要有以下几种: 一、直接创建 直接创建是通过new Object()来创建一个新的空对象,然后逐步给这个对象添加属性和方法。例如,创建一个名为person1的对象,并添加name、gender属性,以及一...
在JavaScript这门动态类型的编程语言中,创建对象是其核心特性之一。本文将详细探讨三种主要的创建JavaScript对象的方法,并结合“源码”与“工具”的概念,来深入理解这些方式在实际开发中的应用。 一、字面量...
本文将详细介绍几种常见的创建对象的方法,包括它们的特点和优缺点。 5.1 工厂方法 工厂方法是一种创建对象的模式,通过一个函数来创建具有特定属性和行为的对象。在JavaScript中,我们可以定义一个函数,如`...
JavaScript作为一门面向对象的脚本语言,其创建对象的方式多种多样,每种方式都有其独特的特点和适用场景。下面我们逐一分析给定文件中所提到的几种创建对象的方法。 首先是使用构造函数模式创建对象。构造函数是...
1.new Object() 2.字面量创建对象 构造函数创建对象 工厂模式
本文将深入探讨JavaScript中创建对象的几种常见方式以及对象方法。 首先,我们来看“工厂模式”。工厂模式是一种创建对象的抽象方式,通过一个函数来返回一个新的对象。例如: ```javascript function getObj(name...
总结来说,JavaScript创建对象的方法有多种,每种都有其适用的场景。JSON对象适合临时使用,`Object`实例适合简单场景,而构造函数及原型链则更适合构建复杂的、可复用的对象模型。在实际开发中,应根据项目需求选择...
本文将详细介绍JavaScript创建对象的几种常见方式,以及它们的优缺点。 首先,我们来看**工厂模式**。这种方式通过一个函数来创建对象,它能创建具有相同属性和方法的对象。然而,工厂模式的缺点在于它没有明显的...
在JavaScript中,创建对象有多种方法,每种方式都有其优缺点。以下是对这些方法的详细解释: 1. **工厂方式**: 工厂函数是通过一个函数来创建对象,它可以根据需要设置属性和方法。然而,这种方法的缺点是每个...
### JavaScript面向对象之常见创建对象的方式 #### 引言 JavaScript 的灵活性体现在其创建对象的多种方式上。本文将详细介绍三种常见的对象创建方法:工厂模式、构造函数模式以及原型模式,并探讨它们各自的优缺点...
如下所示: 代码如下: var person...上面的例子创建了一个名为person的对象,并为它添加了三个属性(name、age和job)和一个方法(sayName())。其中,sayName()方法用于显示this.name()的值。早期的JavaScript开发人员
本文将探讨JavaScript创建对象的几种常见方式,并分析它们的优缺点。 1. **工厂模式** 工厂模式通过一个函数来创建对象,如示例中的`createObj`函数。这种模式的优点是简单易懂,可以方便地创建具有相同属性和方法...
综合以上知识,`js 面向对象实例`涵盖了JavaScript中的面向对象编程基础,以及如何将这些概念应用到HTML5 Canvas的实践中。通过学习和实践这个实例,你不仅可以理解JavaScript的OOP机制,还能掌握如何利用Canvas API...