欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于JavaScript 原型鏈的一點(diǎn)個(gè)人理解

 更新時(shí)間:2016年07月31日 11:41:20   投稿:hebedich  
本文給大家分享的是個(gè)人關(guān)于JavaScript原型鏈相關(guān)知識(shí)的一些理解,這里推薦給大家,希望大家能夠喜歡

JavaScript借鑒了許多語(yǔ)言的特點(diǎn);例如語(yǔ)法類Java、函數(shù)借鑒Scheme、原型繼承借鑒自Self、正則表達(dá)式借鑒于Perl。(DC Javascript:語(yǔ)言精粹)。

     首先,每個(gè)JS是一門基于原型繼承的面向?qū)ο蟮恼Z(yǔ)言。里面數(shù)組是對(duì)象、函數(shù)是對(duì)象、“對(duì)象”當(dāng)然還是對(duì)象。而且每個(gè)對(duì)象都有一個(gè)internal slot[[prototype]],這才是原型鏈連接起來(lái)的關(guān)鍵。誠(chéng)然,我們可以為一個(gè)對(duì)象設(shè)置prototype property,但這又怎么樣呢,這只是表象;后面暗藏殺機(jī)。

    好,那我可以用isPrototypeOf()來(lái)檢驗(yàn)?zāi)硞€(gè)對(duì)象是不是另一個(gè)對(duì)象的原型;然而這也是基于[[prototype]]鏈的。

   舉個(gè)例子:

    //建立一個(gè)函數(shù)

    function foo () {} 

    //修改函數(shù)的prototype property  

    foo.prototype = {

         name : "foo.prototype" 
              };
     //建立一個(gè)實(shí)例 

      var a = new foo();

    //重寫 a 的默認(rèn)原型,本應(yīng)該是foo.prototype.
       a.prototype = {
         name : "a.prototype"
      };

    下面的問(wèn)題是foo.prototype是不是a的原型呢?!

    這要分開來(lái)看:一方面a.prototype確實(shí)是{ name : "a.prototype"};但是,foo.prototype.isPrototypeOf(a)結(jié)果是true.

    下面來(lái)看一看具體的關(guān)系:(使用--->表示不明顯的[[prototype]]鏈,---表示prototype property關(guān)系)

        Function ---> Function.prototype--->Object.prototype

                          Function.prototype <--- foo---foo.prototype ------>Object.prototype 。

    另外,Number、Boolean、String等的[[protptype]]仍然是Fuction.prototype對(duì)象。Function.prototype對(duì)象為“function”,內(nèi)部不含[[construct]]故而不可做構(gòu)造函數(shù)用;實(shí)際上Function.prototype類似:function () {}?!癴unction”類型除了[[prototype]]internal slot外,還有prototype屬性。每個(gè)函數(shù)總是相伴有一個(gè)prototype對(duì)象:this.prototype = {constructor:this}(一個(gè)普通對(duì)象)。這個(gè)普通對(duì)象的[[prototype]]連接到Object.prototype.

   那構(gòu)造函數(shù)建立的實(shí)例對(duì)象的[[prototype]]是Object.prototype嗎?

          該實(shí)例的[[prototype]]是由構(gòu)造函數(shù)的prototype property初始化的,注意不是函數(shù)的[[prototype]].所以如果是由Object這個(gè)函數(shù)構(gòu)造的對(duì)象,那么就確實(shí)是.

  Object是函數(shù),它的prototype是大名鼎鼎的Object.prototype(有點(diǎn)廢話的意思),但是它的[[prototype]]指向Function.prototype.請(qǐng)看下面:

                                                          Object----->Function.prototype------>Object.prototype.

 如何改變這個(gè)[[prototype]]鏈呢?

     可以采用var a = Object.create(obj)的形式,或Object.setPrototypeOf(objA,objB)的形式。我想例子就不用舉了,因?yàn)殛P(guān)系很簡(jiǎn)單;況且我只舉得出一些蹩腳的例子。沒(méi)有意義。

 最后一個(gè)問(wèn)題,行為委托是基于[[prototype]]鏈嗎?

      是的,也是這樣。

相關(guān)文章

  • 12條寫出高質(zhì)量JS代碼的方法

    12條寫出高質(zhì)量JS代碼的方法

    這篇文章給大家講述了如何遵循12條方法來(lái)寫出高質(zhì)量的JS代碼的經(jīng)驗(yàn),有這方便需要的朋友參考下吧。
    2018-01-01
  • js 數(shù)組操作代碼集錦

    js 數(shù)組操作代碼集錦

    用js有很久了,但都沒(méi)有深究過(guò)js的數(shù)組形式。偶爾用用也就是簡(jiǎn)單的string.split(char)。
    2009-04-04
  • JavaScript入門系列課程之一

    JavaScript入門系列課程之一

    JavaScript是一種可以用給網(wǎng)頁(yè)增加交互性的編程語(yǔ)言,是網(wǎng)頁(yè)不可或缺的部分。
    2010-10-10
  • 詳解JavaScript的Polymer框架中的通知交互

    詳解JavaScript的Polymer框架中的通知交互

    這篇文章主要介紹了詳解JavaScript的Polymer框架中的通知交互,Polymer是由Google開發(fā)的針對(duì)Web UI的前端框架,需要的朋友可以參考下
    2015-07-07
  • JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之鏈表

    JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之鏈表

    鏈表就是線性表中針對(duì)順序存儲(chǔ)結(jié)構(gòu)的一種優(yōu)化手段,但是在javascript語(yǔ)言中由于數(shù)組的特殊性(自動(dòng)更新引用位置),所以我們可以采用對(duì)象的方式做鏈表存儲(chǔ)的結(jié)構(gòu)
    2016-01-01
  • 詳解javascript函數(shù)寫法大全

    詳解javascript函數(shù)寫法大全

    這篇文章主要介紹了javascript函數(shù)寫法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • uniapp父子組件傳值3種方法(props、slot和ref)

    uniapp父子組件傳值3種方法(props、slot和ref)

    這篇文章主要給大家介紹了關(guān)于uniapp父子組件傳值的3種方法,方法包括props、slot和ref,最近看到uniapp組件傳值的方法,這里記錄一下,需要的朋友可以參考下
    2023-07-07
  • 解決 firefox 不支持 document.all的方法

    解決 firefox 不支持 document.all的方法

    解決 firefox 不支持 document.all的方法...
    2007-03-03
  • 帶你快速理解javascript中的事件模型

    帶你快速理解javascript中的事件模型

    這篇文章主要介紹了javascript中的事件模型,其中包括了DOM0級(jí)事件模型和DOM2級(jí)事件模型(事件捕獲和事件冒泡和DOM2級(jí)的注冊(cè)事件和解除事件),需要的朋友可以參考下
    2017-08-08
  • asm.js使用示例代碼

    asm.js使用示例代碼

    asm.js是一個(gè)底層、格外為 JavaScript 子集優(yōu)化的編譯器。這是 Mozilla 研究項(xiàng)目,類似 Emscripten, Mandreel, 和 LLJS,這個(gè)示例讓我們簡(jiǎn)單學(xué)習(xí)一下asm.js的使用
    2013-11-11

最新評(píng)論