Javascript 編程範式

Javascript 是多範式語言javascript

1、命令式  2、函數式  3、面向對象java

命令式數組

  基本的邏輯控制、迭代語句等。閉包

 

函數式函數

  一、scope Chain (做用域鏈)this

  Variable Object(變量對象),Activetion Object(活動對象)prototype

  ①VO是在函數被定義是生成的,持有 this ,arguments 和全部在當前函數中聲明的變量、函數和具名函數參數;對象

  ②VO上私有的parent屬性指向外層函數的VO,造成VO scope Chain繼承

  ③最頂層函數的parent指向window,window指向本身。因此,window是scope CHhain的終點。ip

  

  二、read variable

  ①沿VO Chain,逐個向上查找變量名,返回第一個找到的結果;

  ②若知道window尚未找到VO,則會拋出reference error;

 

  三、write variable

  ①沿VO Chain,逐個向上查找變量名,對第一個找到的結果進行賦值;

  ②若知道window仍未找到,則在window上聲明該變量,並賦值;

  ③在strict mode下,第二步裏會拋reference error.

  ④變量、函數聲明會被提高到當前函數的開頭

  ⑤閉包:函數會始終持有被定義時的scope chain。因此該函數即便離開當前環境後,仍能訪問被定義時能夠訪問的全部變量

 

面向對象

  一、Prototype Chain(原型鏈)

  ①對象實例化時,會將構造函數的prototype賦值給對象的私有變量中(prototype);

  ②prototype也是一個對象實例,若沒有人爲置換對象,則其爲Object的實例;

  ③Object.prototype上,沒有prototype。因此Object.prototype始終是prototype chain的終點。

  二、Read instance property(讀取實例屬性)

  ①先在當前instance上查找該property,若沒有找到,則沿prototype chain向上查找,返回第一個找到的結果;

  ②若一直找到prototype chain的終點,仍沒找到,則返回undefined

  三、write instance property(寫實例屬性)

  ①若當前實例存在該property,直接對其進行賦值;

  ②若當前實例上沒有該property, 則在實例上建立該property並賦值;

  ③對實例屬性賦值不會影響到prototype,以及相應構造函數的其餘實例;

  ④若prototype上有引用類型的值,例如對象、數組,若在實例上對其狀態進行修改,則會影響全部的實例

  四、類和繼承

  ①定義類的本質:擴充原型,使其全部實例能夠訪問相應的屬性、方法;

  ②繼承的本質:延長原型鏈,將父類的實例置於子類原型鏈上,使子類的實例能夠訪問父類及其原型鏈上的全部屬性和方法。

 這篇文章原文是在網上的,我本身整理了一下,敲出來的。感受對javascript的脈絡更清晰了。

相關文章
相關標籤/搜索