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>