您的位置:首页 > Web前端 > JavaScript

理解JavaScript——对象的创建

2009-03-23 16:26 363 查看

对象的创建

不管你有没有理解对象,都必须知道对象创建的方式。

JavaScript的自定义对象包含属性(Properties)以及方法(Methods),其创建方式繁多,以下举例可能已过时(但仍可用)、或已经被网上说烂的。这里仅仅是拿出笔者的个人理解。这里必须区分“对象的创建”和“对象的声明”两个术语。前者是建楼,后者是买楼。

1、 构参式(又称:构造函数式)

为了方便理解,我称这个对象创建的方式为“构造参数式”,网上均成为“构造函数式”。以下雷同,便不一一累述了。

构造参数式的创建方法雷同于一般面向对象语言(如C#)的创建方法,采用对号入座的声明方式。这种方法优点在于参数严谨,明确的告诉调用者,stu_Num是用学号,stu_Name是姓名。哪怕对象声明时,输入的参数个数不受对象创建时的参数个数影响。这句话对初学来说比较难理解,这是JavaScript的灵活性。简单举例:Student参数有3个,但不代表你声明student所输入的参数一定是3个。详情可查看示例,以及接下来所提到的无参数式。

适合:参数固定,参数明确的对象。我提出我的征婚标准,如果征婚者不符合,极可能出错或出现预料不到的结果。

示例Code1:

function Student(stu_Num,stu_Name,stu_Age)

{

this._number = stu_Num;

this._name = stu_Name;

this._age = stu_Age;

this._display = function()

{

return "学号:" + this._number + ""n姓名:" + this._name + ""n年龄:" + this._age;

};

};

var student1 = new Student(1,"张三",19);/* 结果:正常 */

alert(student1._display());

var student2 = new Student("张三",19);/* 结果:学号变了“张三”,年龄成了undefined */

alert(student2._display());

2、 无参式

无参数式的格式便是在创建对象时,直接以“()”结尾,基于Arguments对象。优点在于极为灵活(便于重载),缺点也是显而易见的。如果不了解方法的意义,就可能无法良好的控制你输入的部分参数代表了什么意义。比如前面的Student示例便不适合用无参数式创建。笔者不打算就此深入,Arguments将会在后续文章专门讲述。

适合:一系列参数。征婚标准:是人便要。

示例Code2:

function Arg()

{

this.result = 0;

switch(arguments.length)

{

case 0:

break;

default:

//for(var i in arguments) 读者可以尝试以下注释代码。

//alert(arguments.propertyIsEnumerable)//非可枚举对象arguments != Array。

for(var i = 0; i < arguments.length ; i++)

{

this.result += arguments[i] * arguments[i];

}

break;

}

}

var arg =new Arg(5,10,15,20);

alert(arg.result);

3、 初始式

这是一个极为简便的声明方式。无需创建对象,而是把对象把当“属性”在用。缺点在于属于快餐式。一次性使用。

适合:寿命短或把对象当参数。征婚标准:闪电结婚闪电离婚。

var xx =

{

x:18,

y:17,

getSum:function()

{

return this.x +this.y;

},

getProduct:function()

{

return this.x * this.y;

}

};

function css()

{

if(typeof arguments[0] == "object")

{

var elem = document.getElementById("test1");

var st = arguments[0];

for(var i in st)

{

elem.style[i] = st[i];

}

}

}

alert(xx.getSum());

alert(xx.getProduct());

css({"backgroundColor":"red","display":"block"});/* 你可以理解jQuery是如何对CSS进行操作的 */

4、 工厂式

工厂式返回一个定义的对象。优点在于可以动态返回。

适合:动态切换对象。征婚标准:一夫N妻。

var Num = 0;

function Factory()

{

var objF = new Object();

objF.name=arguments[0];

objF.age=arguments[1];

objF.num = Num++;

objF.diplay = function() //如果存在多个创建,建议将dipaly放到外部。否则将导致资源浪费。

{

return "姓名:" + this.name +

""n年龄:" + this.age +

""n编号:" +this.num;

};

return objF;

}

var v1 = Factory("张三",18);

alert(v1.diplay());

var v2 = new Factory("李四",19);

alert(v2.diplay());

5、 原型式、混合式、切换式

优点在于提供了标准默认值。网上有说先创建后赋值。但我更赞同手动赋标准值。比如可以写:Factory.prototype.name = arguments[0]? arguments[0]:”未命名”。

适合:原型式(没有赋值),有默认值。征婚标准:有老婆了,但黄了,所以征情人。

适合:混合式,依据实际情况,给予参数。

适合:切换式,动态切换对象。(不举例,简单说明:比如根据指定参数,返回person、student对象或teacher对象。

var Num = 0;

function Factory()

{

Factory.prototype.name=arguments[0];

Factory.prototype.age=arguments[1];

Factory.prototype.num = Num++;

Factory.prototype.diplay = function() //如果存在多个创建,建议将dipaly放到外部。否则将导致资源浪费。

{

return "姓名:" + this.name +

""n年龄:" + this.age +

""n编号:" +this.num;

};

}

var v1 = new Factory("李四",19);

v1.name="王五";

alert(v1.diplay());

alert(Factory.prototype.name);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: