预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Js如何创建类和对象 使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象。 ECMAScript拥有很多创建对象或类的方法。 工厂方式 原始的方式 因为对象的属性可以在对象创建后动态定义,所有许多开发者都在JavaScript最初引入时编写类似下面的代码: varoCar=newObject; oCar.color="blue"; oCar.doors=4; oCar.mpg=25; oCar.showColor=function(){ alert(this.color); }; 在上面的代码中,创建对象car。然后给它设置几个属性:它的颜色是蓝色,有四个门,每加仑油可以跑25英里。最后一个属性实际上是指向函数的指针,意味着该属性是个方法。执行这段代码后,就可以使用对象car。 不过这里有一个问题,就是可能需要创建多个car的实例。 解决方案:工厂方式 要解决该问题,开发者创造了能创建并返回特定类型的对象的工厂函数(factoryfunction)。 例如,函数createCar()可用于封装前面列出的创建car对象的操作: functioncreateCar(){ varoTempCar=newObject; oTempCar.color="blue"; oTempCar.doors=4; oTempCar.mpg=25; oTempCar.showColor=function(){ alert(this.color); }; returnoTempCar; } varoCar1=createCar(); varoCar2=createCar(); 在这里,第一个例子中的所有代码都包含在createCar()函数中。此外,还有一行额外的代码,返回car对象(oTempCar)作为函数值。调用此函数,将创建新对象,并赋予它所有必要的属性,复制出一个我们在前面说明过的car对象。因此,通过这种方法,我们可以很容易地创建car对象的两个版本(oCar1和oCar2),它们的属性完全一样。 为函数传递参数 我们还可以修改createCar()函数,给它传递各个属性的默认值,而不是简单地赋予属性默认值: functioncreateCar(sColor,iDoors,iMpg){ varoTempCar=newObject; oTempCar.color=sColor; oTempCar.doors=iDoors; oTempCar.mpg=iMpg; oTempCar.showColor=function(){ alert(this.color); }; returnoTempCar; } varoCar1=createCar("red",4,23); varoCar2=createCar("blue",3,25); oCar1.showColor(); //输出"red" oCar2.showColor(); //输出"blue" 给createCar()函数加上参数,即可为要创建的car对象的color、doors和mpg属性赋值。这使两个对象具有相同的属性,却有不同的属性值。 在工厂函数外定义对象的方法 虽然ECMAScript越来越正式化,但创建对象的方法却被置之不理,且其规范化至今还遭人反对。一部分是语义上的原因(它看起来不像使用带有构造函数new运算符那么正规),一部分是功能上的原因。功能原因在于用这种方式必须创建对象的方法。前面的例子中,每次调用函数createCar(),都要创建新函数showColor(),意味着每个对象都有自己的showColor()版本。而事实上,每个对象都共享同一个函数。 有些开发者在工厂函数外定义对象的方法,然后通过属性指向该方法,从而避免这个问题: functionshowColor(){ alert(this.color); } functioncreateCar(sColor,iDoors,iMpg){ varoTempCar=newObject; oTempCar.color=sColor; oTempCar.doors=iDoors; oTempCar.mpg=iMpg; oTempCar.showColor=showColor; returnoTempCar; } varoCar1=createCar("red",4,23); varoCar2=createCar("blue",3,25); oCar1.showColor(); //输出"red" oCar2.showColor(); //输出"blue" 在上面这段重写的代码中,在函数createCar()之前定义了函数showColor()。在createCar()内部,赋