ECMAScript除了原始类型,还有引用类型。引用类型也通常叫做类。但ECMAScript实际上是没有类这个概念的。它仅仅只能称作对象。类的实例化用new关键字来创建。例如var o = new Object();ECMAScript中的类分别有:
Object类是其他所有类的基类,Object类中的所有属性和方法都会出现在其他类中。
Boolean类,Number类,String类,RegExp类,Date类,Array类,Function类
在使用这些类的时候必须特别小心,因为,用new关键字创建的,都属于对象类型。在“转换”一节提到过,任何引用类型,转换成Boolean型都将是true。所以,应该尽量避免使用Boolean,Number,String类,而直接使用他们的原始值。
转换引用类型的误区:
| 以下是引用片段: var oBoolean=new Boolean(false); var oNumber=new Number(0); alert(Boolean(oBoolean)); alert(Boolean(oNumber)); |
伪对象的方法:
| 以下是引用片段: var int=4; var str=‘abcd’; alert(int.toString(8)+‘ ’+(4).toString(16)); alert(typeof int); alert(str.toUpperCase()+ ‘ ’+ ‘EFGH’.toLowerCase()); alert(typeof str); |
| 以下是引用片段: var oObject={}; var oRegExp=/\d/ig; var oArray=[]; var oFunction=function() {} javascript中的对象全是引用类型 var o= new Object() |
javascript中的函数对象也全是引用类型
javascript的对象模型用得最广的是混合的构造函数/原型方法,例:
| 以下是引用片段: function Car(sColor, iDoors, iMpg) ...{ this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike", "Sue"); } Car.prototype.showColor = function () ...{ alert(this.color); }; var oCar1 = new Car("red", 4, 23); var oCar2 = new Car("blue", 3, 25); oCar1.drivers.push("Matt"); alert(oCar1.drivers); //outputs "Mike,Sue,Matt" alert(oCar2.drivers); //outputs "Mike,Sue" |
上例就是一个混合的构造函数/原型方式,每个new出来的对象都拥有自己的属性,但每个对象都指向相同的函数showColor,showColor被每个对象共享(它使用了原型,而属性没使用原型,如果属性也使用原型,它们也将被所有对象共享,修改任何一个对象的属性都将影响到其它对象的属性被修改).
创建javascript对象有好几种方法,但这种方法是最优的,强烈建议使用这种方法。