JavaScript共有屬性(原型)(prototype/__proto__)

標題中,__proto____是由兩個_構成的

共有屬性(原型)

這個觀點就是,一段代碼有諸多個對象,對象有許多的屬性、要領,把這麼多個對象雷同的屬性、要領提取出來,弄在一個新對象里,人人一升引。對象里就只需存儲新對象的地點,到時候要用到這些屬性、要領了,再調出來運用。

看下圖,淺易內存圖。左側原始代碼區里聲清楚明了新對象O1,var O1=new Object(),右側Heap里存儲(從左往右看第一個箭頭的右側都是Heap,沒有Stack)。左側原始代碼區里又聲清楚明了新對象O2,var O2=new Object(),右側Heap里存儲。作為一個對象,有些要領是都有的,比方toString(),valueOf等,所以提取出來,放在共有屬性的Heap里,地點隨機為A100,那末O1O2的Heap里就寄存共有屬性的地點__proto__:A100。你寫代碼O1.toString(),就順着上面的箭頭找到O1的Heap,找一遍沒有,又找到__proto__里彷佛有東西,就找到了共有屬性的Heap,內里有toString()要領。
《JavaScript共有屬性(原型)(prototype/__proto__)》

__proto__prototype的區分

個人明白,__proto__是個地點,用於指向另一個對象,比方某個共有要領庫。prototype就是本個對象一切要領的鳩合。

var a=new Number(1);
a.__proto__                //這個就指向了Number範例的共有要領庫
a.__proto__.prototype      //這個就示意Number範例的共有要領庫里一切的要領

簡樸範例和對象

諸如像下面代碼所示,就是簡樸範例的簡樸聲明。這模樣聲明的變量只包括簡樸範例值,沒有別的像toString(),valueOf,toFixed……等等的要領

var a=1;
var b="abc";
var c=true;

諸如像下面代碼所示,就是簡樸範例的對象聲明。這模樣聲明的變量除了包括簡樸範例值,還自帶了一些範例專屬要領對象要領等等的要領

var a=new Number(1);
var b=new String("abc");
var c=new Boolean(true);

範例專屬要領對象要領就是上面講的共有屬性(原型)。這就彷佛,一切的Number範例有自身的要領庫,一切的String範例有自身的要領庫,一切的Boolean範例有自身的要領庫,這些都是對象,所以末了一切Object範例有一個最最通用的要領庫。畫成圖如下圖。

  • S1,S2 → String範例 → 自身的Heap → String範例要領庫 → Object要領庫
  • n1,n2 → Number範例 → 自身的Heap → Number範例要領庫 → Object要領庫
  • b1,b2 → Boolean範例 → 自身的Heap → Boolean範例要領庫 → Object要領庫
  • o1,o2 → Object範例 → 自身的Heap → Object要領庫

《JavaScript共有屬性(原型)(prototype/__proto__)》

簡樸聲明和對象聲明的區分

講道理,用起來沒啥區分,要領該挪用的挪用,屬性該有的都一樣有。但實際上,是JavaScript自身做了處置懲罰的,方便了開發人員。

  • 你先用簡樸聲明聲明一個簡樸範例var n=1
  • 簡樸範例瑕玷是,它就是一個值,啥也沒有,想對它舉行種種操縱,不可
  • 怎麼辦!如許也太傻太沒用了吧!!那,暫時轉換下吧~~~
  • 暫時轉換:

    • 當你寫下如許的代碼var b=n.toString();
    • 豎立暫時變量tempvar temp=new Number(n)
    • 如許就能夠挪用temptoString()要領了,temp.toString()
  • 好了,暫時轉換好了,準確返回了n.toString()
  • 末了刪除暫時變量temp,完畢,temp來了、做了、走了

《JavaScript共有屬性(原型)(prototype/__proto__)》

再來看看內存圖

  • 左側原始代碼區,簡樸聲明變量var n=1;,中心Stack里存儲n的值
  • 挪用要領n.toString(),Stack里豎立新變量temp,這是個對象,所以Heap里存儲temp的一切內容,Stack里存儲Heap地點ADDR 6
  • 如許n.toString(),就即是temp.toString()
  • 返回temp.toString()后,temp就被消逝了,Heap里的內容也隨之消逝

《JavaScript共有屬性(原型)(prototype/__proto__)》

Number範例

  • 兩種聲明體式格局

    var a=1;
    var b=new Number(1);
  • Number範例專屬要領

    • 聲清楚明了一個變量,輸出變量后看到,內里就只有一個東西__proto__,這是個地點,指向Number範例公用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》
    • 點開__proto__,看到的就是Number範例共用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》
    • 裡邊看到另有個__proto__,由於Number範例也是對象呀,所以這個__proto__指向Object範例公用的要領庫。點開這個__proto__,就看到了Object範例公用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》
  • Number範例經常使用要領

    toString()
    toFixed()
    toExponential()
    valueOf()

charCodeAt(0)
toString(16)

String範例

  • 兩種聲明體式格局

    var a="abc";
    var b=new String("abc");
  • String範例專屬要領

    • 聲清楚明了一個變量,輸出變量后看到,內里除了這個String對象的信息,另有一個東西__proto__,這是個地點,指向String範例公用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》
    • 點開__proto__,看到的就是String範例共用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》




      《JavaScript共有屬性(原型)(prototype/__proto__)》

    • 裡邊看到另有個__proto__,由於String範例也是對象呀,所以這個__proto__指向Object範例公用的要領庫。點開這個__proto__,就看到了Object範例公用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》
  • String範例經常使用要領

    trim()
    concat()
    slice()

Boolean範例

  • 兩種聲明體式格局

    var a=true;
    var b=new Boolean(true);
  • Boolean範例專屬要領

    • 聲清楚明了一個變量,輸出變量后看到,內里就只有一個東西__proto__,這是個地點,指向Boolean範例公用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》
    • 點開__proto__,看到的就是Boolean範例共用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》
    • 裡邊看到另有個__proto__,由於Boolean範例也是對象呀,所以這個__proto__指向Object範例公用的要領庫。點開這個__proto__,就看到了Object範例公用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》
  • Boolean範例經常使用要領

Object範例

  • 兩種聲明體式格局

    var a={name:1};
    var b=new Object({name:1});
  • Object範例專屬要領

    • 聲清楚明了一個變量,輸出變量后看到,內里對象a基本信息,另有一個東西__proto__,這是個地點,指向Object範例公用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》
    • 點開__proto__,a自身就是對象沒有別的範例,所以看到的就是Object範例共用的要領庫
      《JavaScript共有屬性(原型)(prototype/__proto__)》
  • Object範例經常使用要領

    toString()
    valueOf()
    原文作者:BreezingSummer
    原文地址: https://segmentfault.com/a/1190000015206742
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞