HTML5¼¼Êõ

³¹µ×Àí½âJavaScriptÔ­ÐÍ - ÌïС¼Æ»®

×ÖºÅ+ ×÷ÕߣºH5Ö®¼Ò À´Ô´£º²©¿ÍÔ° 2015-11-03 08:26 ÎÒÒªÆÀÂÛ( )

Ô­ÐÍÊÇJavaScriptÖÐÒ»¸ö±È½ÏÄÑÀí½âµÄ¸ÅÄԭÐÍÏà¹ØµÄÊôÐÔÒ²±È½Ï¶à£¬¶ÔÏóÓÐ"[[prototype]]"ÊôÐÔ£¬º¯Êý¶ÔÏóÓÐ"prototype"ÊôÐÔ£¬Ô­ÐͶÔÏóÓÐ"constructor"ÊôÐÔ¡£ ΪÁËŪÇåÔ­ÐÍ£¬ÒÔ¼°Ô­ÐÍÏà¹ØµÄÕâЩÊôÐÔ¹ØÏµ£¬¾ÍÓÐÁËÕâÆªÎÄÕ¡£ ÏàÐÅͨ¹ýÕâÆªÎÄÕÂÒ»¶¨Äܹ»Çå³þµÄÈÏ

Ô­ÐÍÊÇJavaScriptÖÐÒ»¸ö±È½ÏÄÑÀí½âµÄ¸ÅÄԭÐÍÏà¹ØµÄÊôÐÔÒ²±È½Ï¶à£¬¶ÔÏóÓÐ"[[prototype]]"ÊôÐÔ£¬º¯Êý¶ÔÏóÓÐ"prototype"ÊôÐÔ£¬Ô­ÐͶÔÏóÓÐ"constructor"ÊôÐÔ¡£

ΪÁËŪÇåÔ­ÐÍ£¬ÒÔ¼°Ô­ÐÍÏà¹ØµÄÕâЩÊôÐÔ¹ØÏµ£¬¾ÍÓÐÁËÕâÆªÎÄÕ¡£

ÏàÐÅͨ¹ýÕâÆªÎÄÕÂÒ»¶¨Äܹ»Çå³þµÄÈÏʶµ½Ô­ÐÍ£¬ÏÖÔھͿªÊ¼Ô­ÐÍÖ®Âðɡ£

ÈÏʶԭÐÍ

¿ªÊ¼Ô­Ð͵ĽéÉÜ֮ǰ£¬Ê×ÏÈÀ´ÈÏʶһÏÂʲôÊÇÔ­ÐÍ£¿

ÔÚJavaScriptÖУ¬Ô­ÐÍÒ²ÊÇÒ»¸ö¶ÔÏó£¬Í¨¹ýÔ­ÐÍ¿ÉÒÔʵÏÖ¶ÔÏóµÄÊôÐԼ̳У¬JavaScriptµÄ¶ÔÏóÖж¼°üº¬ÁËÒ»¸ö" [[Prototype]]"ÄÚ²¿ÊôÐÔ£¬Õâ¸öÊôÐÔËù¶ÔÓ¦µÄ¾ÍÊǸöÔÏóµÄÔ­ÐÍ¡£

"[[Prototype]]"×÷Ϊ¶ÔÏóµÄÄÚ²¿ÊôÐÔ£¬ÊDz»Äܱ»Ö±½Ó·ÃÎʵġ£ËùÒÔΪÁË·½±ã²é¿´Ò»¸ö¶ÔÏóµÄÔ­ÐÍ£¬FirefoxºÍChromeÖÐÌṩÁË"__proto__"Õâ¸ö·Ç±ê×¼£¨²»ÊÇËùÓÐä¯ÀÀÆ÷¶¼Ö§³Ö£©µÄ·ÃÎÊÆ÷£¨ECMAÒýÈëÁ˱ê×¼¶ÔÏóÔ­ÐÍ·ÃÎÊÆ÷"Object.getPrototype(object)"£©¡£

ʵÀý·ÖÎö

ÏÂÃæÍ¨¹ýÒ»¸öÀý×ÓÀ´¿´¿´Ô­ÐÍÏà¹Ø¸ÅÄ

function Person(name, age){ this.name = name; this.age = age; this.getInfo = function(){ console.log(this.name + " is " + this.age + " years old"); }; } var will = new Person("Will", 28);

ÔÚÉÏÃæµÄ´úÂëÖУ¬Í¨¹ýÁËPersonÕâ¸ö¹¹Ô캯Êý´´½¨ÁËÒ»¸öwill¶ÔÏó¡£ÏÂÃæ¾Íͨ¹ýwillÕâ¸ö¶ÔÏóÒ»²½²½Õ¹¿ªÁ˽âÔ­ÐÍ¡£

 

Step 1£º ²é¿´¶ÔÏówillµÄÔ­ÐÍ

ͨ¹ýÏÂÃæ´úÂ룬¿ÉÒԲ鿴¶ÔÏówillµÄÔ­ÐÍ£º

console.log(will.__proto__); console.log(will.constructor);

½á¹û·ÖÎö:

  • "Person {}"¶ÔÏó¾ÍÊǶÔÏówillµÄÔ­ÐÍ£¬Í¨¹ýChromeÕ¹¿ª¿ÉÒÔ¿´µ½£¬"Person {}"×÷Ϊһ¸öÔ­ÐͶÔÏó£¬Ò²ÓÐ"__proto__"ÊôÐÔ£¨¶ÔÓ¦Ô­Ð͵ÄÔ­ÐÍ£©¡£
  • ÔÚÕâ¶Î´úÂëÖУ¬»¹Óõ½ÁË"constructor"ÊôÐÔ¡£ÔÚJavaScriptµÄÔ­ÐͶÔÏóÖУ¬»¹°üº¬Ò»¸ö"constructor"ÊôÐÔ£¬Õâ¸öÊôÐÔ¶ÔÓ¦´´½¨ËùÓÐÖ¸Ïò¸ÃÔ­Ð͵ÄʵÀýµÄ¹¹Ô캯Êý¡£

  • ͨ¹ý"constructor"Õâ¸öÊôÐÔ£¬ÎÒÃÇ¿ÉÒÔÀ´ÅжÏÒ»¸ö¶ÔÏóÊDz»ÊÇÊý×éÀàÐÍ

    function isArray(myArray) { return myArray.constructor.toString().indexOf("Array") > -1; }

  • ÔÚÕâÀwill¶ÔÏó±¾Éí²¢Ã»ÓÐ"constructor"Õâ¸öÊôÐÔ£¬µ«ÊÇͨ¹ýÔ­ÐÍÁ´²éÕÒ£¬ÕÒµ½ÁËwillÔ­ÐÍ£¨will.__proto__£©µÄ"constructor"ÊôÐÔ£¬²¢µÃµ½ÁËPersonº¯Êý¡£
  •  

    Step 2£º ²é¿´¶ÔÏówillµÄÔ­ÐÍ£¨will.__proto__£©µÄÔ­ÐÍ

    ¼ÈÈ»willµÄÔ­ÐÍ"Person {}"Ò²ÊÇÒ»¸ö¶ÔÏó£¬ÄÇôÎÒÃǾÍͬÑù¿ÉÒÔÀ´²é¿´"willµÄÔ­ÐÍ£¨will.__proto__£©µÄÔ­ÐÍ"¡£

    ÔËÐÐÏÂÃæµÄ´úÂ룺

    console.log(will.__proto__ === Person.prototype); console.log(Person.prototype.__proto__); console.log(Person.prototype.constructor); console.log(Person.prototype.constructor === Person);

    ½á¹û·ÖÎö£º

  • Ê×ÏÈ¿´ "will.__proto__ === Person.prototype"£¬ÔÚJavaScriptÖУ¬Ã¿¸öº¯Êý¶¼ÓÐÒ»¸öprototypeÊôÐÔ£¬µ±Ò»¸öº¯Êý±»ÓÃ×÷¹¹Ô캯ÊýÀ´´´½¨ÊµÀýʱ£¬¸Ãº¯ÊýµÄprototypeÊôÐÔÖµ½«±»×÷ΪԭÐ͸³Öµ¸øËùÓжÔÏóʵÀý£¨Ò²¾ÍÊÇÉèÖÃʵÀýµÄ__proto__ÊôÐÔ£©£¬Ò²¾ÍÊÇ˵£¬ËùÓÐʵÀýµÄÔ­ÐÍÒýÓõÄÊǺ¯ÊýµÄprototypeÊôÐÔ¡£Á˽âÁ˹¹Ô캯ÊýµÄprototypeÊôÐÔÖ®ºó£¬Ò»¶¨¾ÍÃ÷°×ΪʲôµÚÒ»¾ä½á¹ûΪtrueÁË¡£

  • prototypeÊôÐÔÊǺ¯Êý¶ÔÏóÌØÓеģ¬Èç¹û²»ÊǺ¯Êý¶ÔÏ󣬽«²»»áÓÐÕâÑùÒ»¸öÊôÐÔ¡£
  • µ±Í¨¹ý"Person.prototype.__proto__"Óï¾ä»ñÈ¡will¶ÔÏóÔ­Ð͵ÄÔ­ÐÍʱºò£¬½«µÃµ½"Object {}"¶ÔÏ󣬺óÃæ½«»á¿´µ½ËùÓжÔÏóµÄÔ­ÐͶ¼½«×·Ëݵ½"Object {}"¶ÔÏó¡£
  • ¶ÔÓÚÔ­ÐͶÔÏó"Person.prototype"µÄ"constructor"£¬¸ù¾ÝÇ°ÃæµÄ½éÉÜ£¬½«¶ÔÓ¦Personº¯Êý±¾Éí¡£
  • ͨ¹ýÉÏÃæ¿ÉÒÔ¿´µ½£¬"Person.prototype"¶ÔÏóºÍPersonº¯Êý¶ÔÏóͨ¹ý"constructor"ºÍ"prototype"ÊôÐÔʵÏÖÁËÏ໥ÒýÓ㨺óÃæ»áÓÐͼչʾÕâ¸öÏ໥ÒýÓõĹØÏµ£©¡£

     

    Step 3: ²é¿´¶ÔÏóObjectµÄÔ­ÐÍ

    ͨ¹ýǰһ²¿·Ö¿ÉÒÔ¿´µ½£¬willµÄÔ­Ð͵ÄÔ­ÐÍÊÇ"Object {}"¶ÔÏó¡£Êµ¼ÊÉÏÔÚJavaScriptÖУ¬ËùÓжÔÏóµÄÔ­ÐͶ¼½«×·Ëݵ½"Object {}"¶ÔÏó¡£

    ÏÂÃæÍ¨¹ýÒ»¶Î´úÂë¿´¿´"Object {}"¶ÔÏó£º

    console.log(Person.prototype.__proto__ === Object.prototype); console.log(typeof Object); console.log(Object); console.log(Object.prototype); console.log(Object.prototype.__proto__); console.log(Object.prototype.constructor);

    ͨ¹ýÏÂÃæµÄ´úÂë¿ÉÒÔ¿´µ½£º

     

    Step 4: ²é¿´¶ÔÏóFunctionµÄÔ­ÐÍ

    ÔÚÉÏÃæµÄÀý×ÓÖУ¬PersonÊÇÒ»¸ö¹¹Ô캯Êý£¬ÔÚJavaScriptÖк¯ÊýÒ²ÊǶÔÏó£¬ËùÒÔ£¬ÎÒÃÇÒ²¿ÉÒÔͨ¹ý"__proto__"ÊôÐÔÀ´²éÕÒPersonº¯Êý¶ÔÏóµÄÔ­ÐÍ¡£

    console.log(Person.__proto__ === Function.prototype); console.log(Person.constructor === Function) console.log(typeof Function); console.log(Function); console.log(Function.prototype); console.log(Function.prototype.__proto__); console.log(Function.prototype.constructor);

    ½á¹û·ÖÎö £º

    ¶Ô±ÈprototypeºÍ__proto__

    ¶ÔÓÚ"prototype"ºÍ"__proto__"ÕâÁ½¸öÊôÐÔÓеÄʱºò¿ÉÄÜ»áŪ»ì£¬"Person.prototype"ºÍ"Person.__proto__"ÊÇÍêÈ«²»Í¬µÄ¡£

    ¡¡

    1.±¾Õ¾×ñÑ­ÐÐÒµ¹æ·¶£¬ÈκÎ×ªÔØµÄ¸å¼þ¶¼»áÃ÷È·±ê×¢×÷ÕߺÍÀ´Ô´£»2.±¾Õ¾µÄÔ­´´ÎÄÕ£¬Çë×ªÔØÊ±Îñ±Ø×¢Ã÷ÎÄÕÂ×÷ÕߺÍÀ´Ô´£¬²»×ðÖØÔ­´´µÄÐÐΪÎÒÃǽ«×·¾¿ÔðÈΣ»3.×÷ÕßͶ¸å¿ÉÄܻᾭÎÒÃDZ༭Ð޸Ļò²¹³ä¡£

    Ïà¹ØÎÄÕÂ
    • Omi v1.0.2·¢²¼ - Õýʽ֧³Ö´«µÝjavascript±í´ïʽ - ¡¾µ±ÄÍÌØ¡¿

      Omi v1.0.2·¢²¼ - Õýʽ֧³Ö´«µÝjavascript±í´ïʽ - ¡¾µ±ÄÍÌØ¡¿

      2017-03-22 11:03

    • Ò»µÀÃæÊÔÌâÒý·¢µÄ¶ÔjavascriptÀàÐÍת»»µÄ˼¿¼ - ChokCoco

      Ò»µÀÃæÊÔÌâÒý·¢µÄ¶ÔjavascriptÀàÐÍת»»µÄ˼¿¼ - ChokCoco

      2017-03-06 17:00

    • ¶ÔÔ­ÐÍÁ´µÄÀí½â ÓïÑÔ±í´ïÄÜÁ¦²»ºÃ Ö±½ÓÓôúÂ룬¹þ - ФÀò

      ¶ÔÔ­ÐÍÁ´µÄÀí½â ÓïÑÔ±í´ïÄÜÁ¦²»ºÃ Ö±½ÓÓôúÂ룬¹þ - ФÀò

      2017-02-26 14:01

    • £¡importantµÄÀí½â - .smile

      £¡importantµÄÀí½â - .smile

      2017-02-21 08:02

    ÍøÓѵãÆÀ
    µ