站内搜索

ECMAScript引用类型应用

  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));
  在不推荐使用上述三个引用类型时,有人会怀疑,这样岂不是不能使用类提供的丰富的方法。但其实,除了null和undefined,其他三种原始类型其实都是伪对象。也就是说,一个存储原始值的变量,同样可以使用对应的类的方法,甚至,即使是字面量也可以直接使用这些方法,但它本身依旧是原始类型。

  伪对象的方法:

  

以下是引用片段:
var int=4;
  var str=‘abcd’;
  alert(int.toString(8)+‘ ’+(4).toString(16));
  alert(typeof int);
  alert(str.toUpperCase()+ ‘ ’+ ‘EFGH’.toLowerCase());
  alert(typeof str);
  另外,对于Object类、RegExp类、Array类,Function类,也是可以通过字面量来直接定义的,而不需要使用new关键字来创建,但是,它们依旧是引用类型。为了提高效率,建议尽量用字面量来直接定义类。

  

以下是引用片段:
var oObject={};
  var oRegExp=//d/ig;
  var oArray=[];
  var oFunction=function() {}
  javascript中的对象全是引用类型
  var o= new Object()
  o是一个引用,也是一个对象

  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对象有好几种方法,但这种方法是最优的,强烈建议使用这种方法。

 

  • 上一篇:JavaScript运算符实例详解
  • 下一篇:ECMAScript引用类型精讲