ÔÐÍÊÇ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);
½á¹û·ÖÎö:
ÔÚÕâ¶Î´úÂëÖУ¬»¹Óõ½ÁË"constructor"ÊôÐÔ¡£ÔÚJavaScriptµÄÔÐͶÔÏóÖУ¬»¹°üº¬Ò»¸ö"constructor"ÊôÐÔ£¬Õâ¸öÊôÐÔ¶ÔÓ¦´´½¨ËùÓÐÖ¸Ïò¸ÃÔÐ͵ÄʵÀýµÄ¹¹Ô캯Êý¡£
ͨ¹ý"constructor"Õâ¸öÊôÐÔ£¬ÎÒÃÇ¿ÉÒÔÀ´ÅжÏÒ»¸ö¶ÔÏóÊDz»ÊÇÊý×éÀàÐÍ
function isArray(myArray) { return myArray.constructor.toString().indexOf("Array") > -1; }
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ÁË¡£
ͨ¹ýÉÏÃæ¿ÉÒÔ¿´µ½£¬"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__"ÕâÁ½¸öÊôÐÔÓеÄʱºò¿ÉÄÜ»áŪ»ì£¬"Person.prototype"ºÍ"Person.__proto__"ÊÇÍêÈ«²»Í¬µÄ¡£
¡¡