Js解惑——原型鏈

王福朋:深刻理解javascript原型和閉包javascript


一切都是對象html

對象就是屬性的集合,也就是一堆鍵值對,就連函數也是對象。java

函數與對象的關係瀏覽器

  1. 對象都是經過函數來建立的
  2. 每一個函數都有一個屬性,叫作prototype,屬性值是一個對象,該對象默認只有一個屬性,constructor指向函數自己     ```         function.prototype         // key = prototype, value = Object

        function.prototype.contructor --> function     ``` 3. 每一個對象都有一個隱藏的屬性,"__proto__",這個屬性指向建立這個對象的函數(對象)的prototype屬性閉包

原型鏈

原型app

  1. 自定義函數的prototype指向一個對象,該對象的__proto__指向Object.prototype
  2. 自定義函數做爲對象,它的__proto__指向Function.prototype
  3. Object.prototype指向null
  4. Function.__proto__指向Function.prototype

繼承函數

  1. A instanceof B,instanceof表示一種關係,或者原型鏈的結構
  2. A對象的__proto__和B函數的prototype,若是能找到同一個引用,則爲true
  3. 訪問一個對象的屬性時。如今基本屬性中查找,若是沒有,再沿着__proto__這條鏈想上找,這就是原型鏈

執行上下文this

在一段js代碼執行以前,瀏覽器先作一些準備工做prototype

  1. 變量、函數表達式(var a = fn(){}),變量聲明,默認賦值爲undefined
  2. this,賦值
  3. 函數聲明,賦值

js代碼的執行上下文,相似於java中加載類時的初始化過程。htm

this

分四種狀況

  1. 構造函數中的this,new的時候表明它即將new出來的對象,直接調用時則不同
  2. 函數做爲對象的一個屬性被調用時,this指向該對象
  3. 函數用call或者apply調用,this指向傳入的對象
  4. 全局、調用普通函數,this指向window

做用域

  1. js沒有塊級做用域
  2. 除了全局做用域以外,只有函數能夠建立做用域
  3. 對於沒有在本做用域聲明的自由變量,取值要到建立這個函數的那個做用域中取值

閉包

  1. 函數做爲返回值
  2. 函數做爲參數被傳遞
  3. 以上兩種狀況,若是函數引用其餘做用域中的自由變量,則造成閉包
相關文章
相關標籤/搜索