javascript之原型

 

寫做背景javascript

最近在抓基礎,畢竟沒有好地基蓋樓容易塌啊...再回首javascript,原型能夠說是該語言較爲核心的設計之一,咱們有必要了解下其設計理念 (#^.^#)java

 

基本概念chrome

  • MyObject.prototype:用於創建由new MyObject()建立的對象的原型。
  • _proto_:獲取obj對象的原型對象的非標準方法(只在某些瀏覽器支持,如chrome/safari/firefox)。
  • Object.getPrototype(obj):獲取obj原型對象的標準方法。
  • 原型對象:包含由特定類型的全部實例共享的屬性和方法;prototype正指向這個對象。
  • constructor:每一個系統默認,注意系統默認的原型對象都有一個constructor屬性,指向其構造函數。

 

原型對象圖解

說明瀏覽器

  • 每一個函數都有一個prototype屬性,指向原型對象。
  • 原型對象默認取得一個constructor屬性,這個屬性包含一個指向prototype屬性所在函數的指針。
  • 構造函數建立的每一個實例中包含一個[[prototype]]指針,指向構造函數的原型對象。(備註:這個指針的標準訪問方式爲Object.prototype(obj),非標準訪問方式爲_proto_

 

Object、Function和原型關係函數


說明this

  • 首先Object和Function都是構造函數,而全部的構造函數的都是Function的實例對象. 所以Object是Function的實例對象。
  • Function.prototype原型對象是Object的實例對象。
  • 實例對象的原型(咱們以proto來表示)會指向其構造函數的prototype屬性, 所以Object.proto ===Function.prototype,Function.proto===Function.prototype,Function.prototype.proto === Object.prototype
  • 當咱們訪問一個屬性值的時候, 它會沿着原型鏈向上查找, 直到找到或者到Object.prototype.proto(爲null)截止。

 

原型鏈實現繼承

本圖參考實現代碼見javascript高級程序設計spa

function SuperType(){ this.property = true; } SuperType.prototype.getSuperValue = function(){ return this.property; }; function SubType(){ this.subproperty = false; } //繼承了SuperType
SubType.prototype = new SuperType(); SubType.prototype.getSubValue = function (){ return this.subproperty; }; var instance = new SubType(); alert(instance.getSuperValue()); //true

 

原型鏈弊端firefox

  • 在經過原型來實現繼承時,原型實際上會變成另外一個類型的實例。因而,原先的實例屬性也就瓜熟蒂落地變成了如今的原型屬性了。
  • 沒有辦法在不影響全部對象實例的狀況下,給超類型的構造函數傳遞參數。

 

但願文章對小夥伴有所幫助,也很是歡迎指出文章存在問題,emmmmmmmmmm......prototype

相關文章
相關標籤/搜索