Javascript的一些解釋

weixin_33890499發表於2017-01-14

1.原型(prototype)

每個物件都可以連線到一個圓形物件,並且它可以從中繼承屬性,所有通過字面量建立的物件都連線到Object.prototype,它是Javascript中的標配物件。

當你建立一個新物件時,你可以選擇某個物件作為它的原型。Javascript提供的實現機制雜亂而複雜,但其實可以被明顯地簡化。

我們將給Object增加一個create方法。這個方法建立一個使用原物件作為原型的新物件。

if(typeof Object.beget !=='function'){
      Object.create=function(o){
      var F=function(){};
     F.prototype=o;
     return new F();
  }
}

var another_stooge=Object.create(stooge);

原型連線在更新是不起作用的。當我們對某個物件做出改變時,不會觸及該物件的原型:

another_stooge['first-name']='Harry';
another_stooge['middle-name']='Moses';
another_stooge.nickname='Moe';

原型連線只有在檢索值的時候才被用到。如果我們嘗試獲取物件的某個屬性值,但該物件沒有此屬性名,那麼Javascript會是這從原型物件中獲取屬性值。如果那個原型物件也沒有該屬性,那麼再從它的原型尋照,依此類推,知道該過程最後到達終點Object.prototype。如果想要的屬性完全不存在於原型鏈中,那麼結果就是undefined值。這個過程稱為委託。

原型關係是一種動態的關係。如果新增一個新的屬性到原型,該屬性會立即對所有基於該原型建立的物件可見。
來源:Javascript語言精粹 p22

2.反射(Reflection)

檢查物件並確定物件有什麼屬性是很容易的事情,是要試著去檢索該屬性並驗證取得的值。typeof操作符對確定屬性的型別很有幫助。

var flight={number:876214,status:'in time',arrival:{country:'china',city:'chongqing'}}
  typeof flight.number    //'number'
  typeof flight.status  //'string'
  typeof flight.arrival  //'object'
  typeof flight.manifest //'undefined'

請注意原型鏈中的任何屬性都會產生值:

typeof flight.toString  //'function'
typeof flight.constructor //'function'

另外可以使用hasOwnProperty方法,如果物件擁有獨有的屬性,它將返回true,該方法不會檢查原型鏈。

  flight.hasOwnProperty('number');  //true
  flight.hasOwnProperty('constructor');  //false

相關文章