基礎知識點 關於 prototype __proto__

基礎知識點 關於 prototype  __proto__

供js新手參考app

 JavaScript 的一些基礎知識點:函數

  1. 在 JavaScript 中,全部對象 o 都擁有一個隱藏的原型對象(在 Firefox 中是 o.__proto__)。該隱藏原型對象擁有一個 constructor 成員,指向該對象的構造函數。當讀取對象成員 o.member 時,會順着原型鏈往上回溯。所以咱們能夠獲得o.constructor === o.__proto__.constructor. 這是最基本的知識點,很少說。
  2. 在 JavaScript 中,全部函數聲明在解析後,都自動擁有一個 prototype 成員。該 prototype 成員擁有一個自動添加的 constructor 成員,指向函數自己。也就是Fn === Fn.prototype.constructor.
  3. 函數 Fn 自己也是對象,所以Fn.constructor === Fn.__proto__.constructor, 注意Fn.__proto__ !== Fn.prototype, 千萬不要混淆了。
  4. var fn = new Fn(),在 Firefox 下,不考慮參數傳遞,能夠用下面的代碼來表示 new 的過程:
    var o = {__proto__: Fn.prototype};
    Fn.apply(o);
    fn = o;
    
  5. 上面第 4 點是第 1 點的緣由,由於任何一個對象都源自函數構造器,好比 var a = {} 能夠等價爲:
    var o = {__proto__: Object.prototype};
    Object.apply(o);
    a = o;
    

    所以全部對象都具備 constructor 成員。prototype

上面 5 點能夠歸結爲 2 點:構造函數的實例化過程和對象成員的原型鏈回溯機制。理解了這兩點,市面上 JavaScript 的各類各樣 OOP 機制,好比 Dean Edwards 的 Base.extend,MooTools 裏的 new Class, 以及《悟透 JavaScript》裏的甘露模型等等,就都能輕鬆輕鬆理解了。code

相關文章
相關標籤/搜索