JavaScript面向对象(动态原型法)

1.定义类(对象模版)

动态原型方法

示例:

function Car(sColor,iDoors,iMpg) {

  this.color = sColor;

  this.doors = iDoors;

  this.mpg = iMpg;

  this.drivers = new Array("Mike","John");

  

  if (typeof Car._initialized == "undefined") {

    Car.prototype.showColor = function() {

      alert(this.color);

    };

	

    Car._initialized = true;

  }

}

 

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

 

 

2.声明和实例化

 

对象的创建方式是用关键字 new 后面跟上实例化的类的名字:

var oObject = new Object();

var oStringObject = new String();

第一行代码创建了 Object 类的一个实例,并把它存储到变量 oObject 中。第二行代码创建了 String 类的一个实例,把它存储在变量 oStringObject 中。如果构造函数无参数,括号则不是必需的。因此可以采用下面的形式重写上面的两行代码:

var oObject = new Object;

var oStringObject = new String;

 

3.调用

var car = new Car('red','2door','3');

alert(car.doors);

car.showColor();

 

4.完整示例

 

 1 <html>

 2 <body>

 3 

 4 <script type="text/javascript">

 5 function Car(sColor,iDoors,iMpg) {

 6   this.color = sColor;

 7   this.doors = iDoors;

 8   this.mpg = iMpg;

 9   this.drivers = new Array("Mike","John");

10   

11   if (typeof Car._initialized == "undefined") {

12     Car.prototype.showColor = function() {

13       alert(this.color);

14     };

15     

16     Car._initialized = true;

17   }

18 }

19 

20 var car = new Car('red','2door','3');

21 alert(car.doors);

22 car.showColor();

23 

24 

25 </script>

26 

27 </body>

28 </html>

 


 

你可能感兴趣的:(JavaScript)