觀<>之對類的支持總結

<<javascript框架設計>>之prototype及javascript中"類"的概念javascript

prototype 屬性(對象)

爲對象的類返回原型的引用。html

1.概念和總結java

   在javascript中全部函數均可以做爲構造器,全部函數都會有prototype這個特殊的對象屬性(便是一個對象又是函數對象的屬性),好比:瀏覽器

  var baby=function(){框架

    var name="寶寶";//(等同於this.name="寶寶")函數

    var age=0;//(等同於this.age=0)this

    var getname=function(){return this.name;};//(等同於this.getname=function(){return  this.name;})spa

    function getage(){return this.age};//(等同於this.getage=function(){return this.age;})    prototype

  };設計

  baby.prototype={

    name1:"寶貝",

    getname1:function(){return this.name+'剛出生'}

  }

  var son=new baby();

  son.getname2=function(){return '兒子'};

baby即爲構造器,son爲實例;

使用new一個構造器(函數)來建立一個實例對象.

var child=new baby();

全部同一個構造器(baby)的實例對象(son,child)都會擁有該函數(baby)的prototype對象的全部成員(屬性+方法),經過這種方式實現方法和屬性的共享.

  在javascript中經過修改prototype對象來區別原生對象(內置對象+Arguments)及其餘自定義'類'

  在瀏覽器中,Node類是基於Object修改而來,而Element則基於Node,HTMLElement是基於Element.......

  原型方法: 定義在prototype對象內的方法(getname1),爲全部實例所共享

  原型屬性: 定義在prototype對象內的屬性(name1),爲全部實例所共享

  特權方法: 直接定義(包括經過this引用建立,如this.getage)在構造器(函數)內的方法,也便是使用var定義的方法,私有

  特權屬性: 直接定義(包括經過this引用建立,如this.age)在構造器(函數)內的屬性,也便是使用var定義的屬性,私有

          注意-- 經過this引用建立的特權方法或屬性(優先訪問)會屏蔽同名原型方法或屬性,只要手動刪除特權方法或屬性就能夠訪問到原型方法或屬性.(已驗證) 

  類方法(類屬性) : 在javascript中直接定義在函數上的方法,便是經過函數名引用自定義方法名並聲明一個函數的方式實現的,該自定義方法即爲類方法.形式: func.method = function(){},類方法不會被實例所訪問.

  繼承的實現 : 若是把函數A的prototype對象置換成函數B的原型(prototype),那麼A的原型就獲得了B的全部原型方法和原型屬性.即便後來在B的prototype上添加的方法或屬性,也是會被A的原型繼承到.

  把一個函數的prototype賦給兩個不一樣的函數而又能保持這兩個函數的prototype對象相對獨立的兩種辦法:

  方法一(拷貝繼承): 經過for in把父類的原型成員逐一賦給子類的原型

     方法二(原型繼承): 先把父類的prototype賦給一個函數,而後將這個函數實例做爲子類的原型

 實例回溯機制: 訪問對象的一個屬性時會先找其特權成員,若是存在就返回,不存在就去找原型,再沒有就找父類的原型......
  constructor :每一個實例都有這個方法,指向其構造器.

  對象內部屬性[[Prototype]]:保存着實例化的構造器所引用的prototype對象,對外提供了一個__proto__屬性來訪問它

  new操做時,

  (1) 建立一個空對象 instance

  (2) instance.__proto__ = instanceClass.prototype.

  (3) 將構造器函數裏的 this = instance

  (4) 執行構造器裏的代碼

  (5) 斷定是否有返回值,沒有則返回undefined, 若是返回值爲複合數據類型,直接返回, 不然返回 this

  注: js中主要的複合數據類型有object和Array,Array實際上是一種特殊數據類型,對於弱類型的js語言,Array有不少其餘語言沒有的特性。

          js複合型數據,參考自--http://www.cnblogs.com/roooc/archive/2012/09/12/2679041.html

相關文章
相關標籤/搜索