javascript定义类或对象之动态原型法

    在javascrip定义类和对象有很多种方法,但是,对于动态原型方法定义的方式,我还是很陌生的.今天看了js高级程序设计才发现,动态原型方法的基 本思想与混合的构造函数/原型方式相同,即在构造函数内定义非函数属性,而函数属性则利用原型属性定义.唯一的区别是赋予对象方法的位置.

 下面是用动态原型方法来写Car类:

  1. function Car(sColor, iDoors, iMpg) {   
  2.     this.color = sColor;   
  3.     this.doors = iDoors;   
  4.     this.mpg = iMpg;   
  5.     this.drivers = new Array("Mike", "Sue");   
  6.        
  7.     //注意   
  8.     if (typeof Car._initialized == "undefined") {   
  9.         Car.prototype.showColor = function() {   
  10.             alert( this.color );   
  11.         };      
  12.        Car._initialized = true;  
  13.    }   
  14.      
  15. }   

    直到检查typeof Car._initialized 是否等于"undefined" 之前,这个构造函数都未发生变化.这行代码是动态原型方法中最重要的部分.如果这个值未定义,构造函数将用原型方式继续定义对象的方法,然后把Car._initialized设 置为true. 如果这个值定义了(它的值为true时, typeof的值为Boolean), 那么就不再创建该方法.简而言之,该方法使用标志来判断是否己给原型赋予了任何方法.该方法只创建并赋值一次,传统的OOP开发者会高兴地发现,这段代码 看起来更像其他语言中的类定义了.

    呵呵,动态原型方法也是很流行的,在功能上与构造函数/原型方式等价.可以采用这两种方式中的任何一种.不过,需要注意的是,不要单独使用经典的构造函数或原型方式,因为这样会给代码引入问题[转].(其实我现在还没有看懂)

posted @ 2008-07-31 17:44  echohqu  阅读(871)  评论(1编辑  收藏  举报