犀牛書學習筆記(7):定義和使用類或對象

嚴格來講,javascript沒有類,但爲了便於理解,咱們將類和對象當作同一個概念來講。javascript

javascript有不少種定義類的方式,這還真有點狗血,選擇太多必然增長了語言的複雜度,因此咱們須要評估、選擇合適的方式。java

 

類或對象定義編程

咱們先看看JAVA類定義方式函數

class Car {
  public String color = "blue";
  public int doors = 4;
  public int mpg = 25;

  public Car(String color, int doors, int mpg) {
    this.color = color;
    this.doors = doors;
    this.mpg = mpg;
  }
  
  public void showColor() {
    System.out.println(color);
  }
}

 

javascritp推薦定義方式:混合構造函數和原型的方式性能

function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.drivers = new Array("Mike","John");
}

Car.prototype.showColor = function() {  //使用Car對象的原型添加方法showColor
  alert(this.color);
};

//到這裏,類定義完成
var oCar1 = new Car("red",4,23); var oCar2 = new Car("blue",3,25);
oCar1.triger=function(){             //給類實例oCar1對象添加一個方法triger       
  //body 
}
oCar1.drivers.push("Bill"); alert(oCar1.drivers); //輸出 "Mike,John,Bill" alert(oCar2.drivers); //輸出 "Mike,John"

一、首先定義了構造函數構造函數Car,構造函數具備多個參數,這裏只定義屬性,屬性值可經過參數值傳遞進行初始化。請注意函數屬性的定義方式,須要使用this,this的值是實例化類this

後的對象。spa

二、Car.prototype是調用類的原型,爲原型增長方法showColor,爲其賦值一個匿名函數,這樣就算給類car定義了方法,還記得前面說到嗎,類的方法就是賦值給一個類屬性的函數。prototype

三、oCar1是類Car的實例,new操做符建立了一個沒有任何屬性的對象,而後調用構造函數,若是構造函數有參數,能夠給參數賦值。新的對象會賦值給this,code

這就是一個類定義,包括定義屬性和方法,並經過類實例化對象的過程。對象

 

類或對象動態性

javascript這類弱類型語言,一般也稱爲動態語言,弱類型帶來修改類型的靈活性。想一想JAVA,類都是預先定義好的,實例化成對象以後,運行過程當中通常都不會修改。採用反射自省方式才能動態修改類,每每成爲高級編程技巧,且會很是大的影響性能。

使用prototype,能夠很是方便的爲任意對象修改屬性和方法。

建立新方法

Number.prototype.toHexString = function() {
  return this.toString(16);
};
// 爲Number對象建立新方法

重命名方法

Array.prototype.enqueue = function(vItem) {
  this.push(vItem);
};

Array.prototype.dequeue = function() {
  return this.shift();
};

//添加兩個新方法封裝覆蓋了已有方法

爲本地對象添加方法

Object.prototype.showValue = function () {
  alert(this.valueOf());
};

var str = "hello";
var iNum = 25;
str.showValue();        //輸出 "hello"
iNum.showValue();        //輸出 "25"

// 給 ECMAScript 中每一個本地對象添加新方法,必須在 Object 對象的 prototype 屬性上定義它。全部本地對象都繼承了 Object 對象,因此對 Object 對象作任何改變,都會反應在全部本地對象上。

 

定義類的時候可考慮定義的方法

  • toString()
  • valueOf()
  • compareTo()
相關文章
相關標籤/搜索