js繼承與閉包(筆記)

一、一切引用類型都是對象,對象是屬性的集合;typeof null === 'object'(例外);javascript

二、對象都是經過函數建立來的,好比var obj = new Object();typeof Object === 'function'; java

三、函數有隱藏屬性prototype,對象有隱藏屬性__proto__;閉包

     Func.prototype.constructor === Func;app

     func.__proto__ === Func.prototype;函數

四、對象的__proto__屬性都指向建立它的函數的prototype;this

    Object.prototype.__proto === null;prototype

    Object.__proto__ === Function.prototype;code

    Function.__proto__ === Function.prototype;對象

    Function.prototype.__proto === Object.prototpe;繼承

五、instanceof 實際上是一種繼承關係,A instanceof B(沿着A的__proto__找,同時沿着B的prototype找,若是最終能找到同一個飲用,就true);

六、訪問一個對象的屬性,若是自身沒有,則沿着__proto__向上找,這就是原型鏈;

七、var obj = {},arr = [];

     obj.toString === '[object Object]';

     arr.toString === '';  說明Array.prototype.toString方法被改了;

八、處於活動狀態的執行上下文只有一個;

     做用域是一個抽象的概念,其中沒有變量,要經過做用域對應的執行上下文來獲取變量的值,且不一樣的調用會產生不一樣的上下文;

     函數是在定義時就肯定了函數體內部自由變量的做用域;

     除了全局做用域,只有函數是能夠建立一個獨立的做用域;

     要區一個變量的值,要到建立它的函數的那個做用域中取值,這就是所謂的靜態做用域;

     在A做用域中使用的變量a,卻沒在A中聲明,則稱a是自由變量;

九、1⃣️ 函數做爲構造函數用,this指向new出來的對象;

     2⃣️ 函數做爲對象的一個屬性被調用,this指向該對象;

     3⃣️ 在call、apply中,this指向傳入的對象;

     4⃣️ 全局調用普通函數,this指向window;

十、閉包特性:函數嵌套函數;函數內部可引用外部變量;變量不會被回收。

       閉包是指有權訪問另外一個函數做用域中的變量的函數,閉包缺點是容易內存泄露。

       垃圾回收原理:在javascript中,若是一個對象再也不被引用,那麼這個對象就會被GC回收; 若是兩個對象互相引用,而再也不被第3者所引用,那麼這兩個互相引用的對象也會被回收。

相關文章
相關標籤/搜索