javascript类的写法

1.建立类的各种方式的优点和缺点
a.工厂方式
function createCar() {
  var oTempCar = new Object;
  oTempCar.color = "blue";
  oTempCar.doors = 4;
  oTempCar.mpg = 25;
  oTempCar.showColor = function() {
    alert(this.color);
  };
  return oTempCar;
}
var oCar1 = createCar();
使用时每个对象每新建一个类,独立占用一片内存。

b.构造函数方式
function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.showColor = function() {
    alert(this.color);
  };
}
var oCar1 = new Car("red",4,23);
比工厂方式好在创建时不用先临时建一个对象再返回,减少动态内存占用。
就像工厂函数,构造函数会重复生成函数,为每个对象都创建独立的函数版本。

3.原型方式
function Car() {
}

Car.prototype.color = "blue";
Car.prototype.doors = 4;
Car.prototype.mpg = 25;
Car.prototype.showColor = function() {
  alert(this.color);
};


var oCar1 = new Car();
var oCar2 = new Car();
这样 oCar1 与 oCar2同用同一片内存,减少内存占用
问题出现在属性指向的是对象,而不是函数时。函数共享不会造成问题,但对象却很少被多个实例共享

4.混合的构造函数/原型方式
function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.drivers = new Array("Mike","John");
}
Car.prototype.showColor = function() {
  alert(this.color);
};
var oCar1 = new Car("red",4,23);
var oCar2 = new Car("blue",3,25);
oCar1.drivers.push("Bill");
alert(oCar1.drivers);//输出 "Mike,John,Bill"
alert(oCar2.drivers); //输出 "Mike,John"
类属性使用构造函数的方式,方法使原型方式即上解决上面的问题,建议使用这种方式

5.动态原型方法
上一种方式的优化版,使其符合使用java c#开发人员的开发习惯
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() {  //这是是直接定义的car类的方法,如果使用时有多个对象使用new car()的方式,只在第一个new时会建立方法,
      alert(this.color);
    };

    Car._initialized = true;

  }
}
直到检查 typeof Car._initialized 是否等于 "undefined" 之前,这个构造函数都未发生变化。这行代码是动态原型方法中最重要的部分。如果这个值未定义,构造函数将用原型

方式继续定义对象的方法,然后把 Car._initialized 设置为 true。如果这个值定义了(它的值为 true 时,typeof 的值为 Boolean),那么就不再创建该方法。


6.单实例类的写法

单实例类的写法:(如果一个类要作为全局的应用,只能有一个实例,可以用这个语法。)
var OverlayPage = {
    // 方法1
    initOverlay : function(location) {},
    // 方法2
    openOverlay : function(number, url, modalWidth, modalHeight) {}
};
调用时的写法:
OverlayPage.initOverlay(location);

你可能感兴趣的:(javascript类的写法)