Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Ϸ˵JSÖеÄÔ­ÐÍ-Prototype
 
À´Ô´£ºÍøÂç ·¢²¼ÓÚ 2017-4-14
  2132  次浏览      27
 

javascript ûÓм̳ÐÕâ¸ö»¹ÊDZȽϵ°Ì۵ĵط½£¬Äã˵ҪÊÇÓÐÒ»¸öÀàÓм¸¸öÏàͬµÄÊôÐÔ£¬µ«ÊÇÎÒÃÇÓÖ²»Äܹ»È¥¼Ì³ÐËû£¬Õâ¸ö̫ʹ¿àÁË£¿Èç¹û³öÏÖÕâ¸öÎÊÌâÁËÎÒÃÇÄܹ»Ôõô°ì°¡£¬ÏëÏ뻹ÊDZȽϵ°Ì۵ġ£¡£¡£¡£°¡°¡°¡°¡ °¡£¬²»ÄÜÕâÃ´Íæ°É¡£µ«ÊÇ×ÐϸÏëÏëÔõô¿ÉÄÜ»á³öÏÖÕâÑùµÄÎÊÌâÁË£¬¿Ï¶¨»áÓÐÒ»ÖÖ»úÖÆÀ´ÊµÏÖ»òÕß˵¸Ä±äÕâ¸ö״̬£¬ÆäʵÔÚÕâÀïµÄ»°£¬ÎÒÃǾͿÉÒÔ˵˵ÎÒÃǽñÌìµÄÖ÷ÌâÁË£¬Ô­ÐÍ£¿

ʲôÊÇÔ­ÐÍ£º

Ò»¡¢º¯Êý´´½¨¹ý³Ì

ÔÚÁ˽âÔ­ÐÍÁ´Ö®Ç°ÎÒÃÇÏÈÀ´¿´¿´Ò»¸öº¯ÊýÔÚ´´½¨¹ý³ÌÖÐ×öÁËÄÄЩÊÂÇ飬¾ÙÒ»¸ö¿Õº¯ÊýµÄÀý×Ó£º

function A() {};

µ±ÎÒÃÇÔÚ´úÂëÀïÃæÉùÃ÷Õâôһ¸ö¿Õº¯Êý£¬js½âÎöµÄ±¾ÖÊÊÇ£º

1¡¢´´½¨Ò»¸ö¶ÔÏó£¨ÓÐconstructorÊôÐÔ¼°[[Prototype]]ÊôÐÔ£©£¬¸ù¾ÝECMA£¬ÆäÖÐ[[Prototype]]ÊôÐÔ²»¿É¼û¡¢²»¿Éö¾Ù

2¡¢´´½¨Ò»¸öº¯Êý£¨ÓÐname¡¢prototypeÊôÐÔ£©£¬ÔÙͨ¹ýprototypeÊôÐÔ ÒýÓà ¸Õ²Å´´½¨µÄ¶ÔÏó

3¡¢´´½¨±äÁ¿A£¬Í¬Ê±°Ñº¯ÊýµÄ ÒýÓà ¸³Öµ¸ø±äÁ¿A

ÈçÏÂͼËùʾ£º

£¨×¢ÒâͼÖж¼ÊÇ¡° ÒýÓà ¡±ÀàÐÍ£©

ÿ¸öº¯ÊýµÄ´´½¨¶¼¾­ÀúÉÏÊö¹ý³Ì¡£

¶þ¡¢¹¹Ô캯Êý

ÄÇôʲôÊǹ¹Ô캯ÊýÄØ£¿

°´ÕÕECMAµÄ¶¨Òå

Constructor is a function that creates and initializes the newly created object.

¹¹Ô캯ÊýÊÇÓÃÀ´Ð½¨Í¬Ê±³õʼ»¯Ò»¸öжÔÏóµÄº¯Êý¡£

ʲôÑùµÄº¯Êý¿ÉÒÔÓÃÀ´´´½¨Í¬Ê±³õʼ»¯Ð¶ÔÏóÄØ£¿´ð°¸ÊÇ£ºÈκÎÒ»¸öº¯Êý£¬°üÀ¨¿Õº¯Êý¡£

ËùÒÔ£¬½áÂÛÊÇ£ºÈκÎÒ»¸öº¯Êý¶¼¿ÉÒÔÊǹ¹Ô캯Êý¡£

Èý¡¢Ô­ÐÍ

¸ù¾ÝÇ°Ãæ¿Õº¯ÊýµÄ´´½¨Í¼Ê¾£¬ÎÒÃÇÖªµÀÿ¸öº¯ÊýÔÚ´´½¨µÄʱºò¶¼×Ô¶¯Ìí¼ÓÁËprototypeÊôÐÔ£¬Õâ¾ÍÊǺ¯ÊýµÄÔ­ÐÍ£¬´ÓͼÖпÉÖªÆäʵÖʾÍÊǶÔÒ»¸ö¶ÔÏóµÄÒýÓã¨Õâ¸ö¶ÔÏóÔÝÇÒÈ¡ÃûÔ­ÐͶÔÏ󣩡£

ÎÒÃÇ¿ÉÒÔ¶Ôº¯ÊýµÄÔ­ÐͶÔÏó½øÐвÙ×÷£¬ºÍÆÕͨµÄ¶ÔÏóÎÞÒ죡һÆðÀ´Ö¤ÊµÒ»Ï¡£

Î§ÈÆ¸Õ²Å´´½¨µÄ¿Õº¯Êý£¬Õâ´Î¸ø¿Õº¯ÊýÔö¼ÓһЩ´úÂ룺

function A() {
this.width = 10;
this.data = [1,2,3];
this.key = "this is A";
}
A._objectNum = 0;//¶¨ÒåAµÄÊôÐÔ
A.prototype.say = function(){//¸øAµÄÔ­ÐͶÔÏóÌí¼ÓÊôÐÔ
alert("hello world")
}

µÚ7~9ÐдúÂë¾ÍÊǸøº¯ÊýµÄÔ­ÐͶÔÏóÔö¼ÓÒ»¸ösayÊôÐÔ²¢ÒýÓÃÒ»¸öÄäÃûº¯Êý£¬¸ù¾Ý¡°º¯Êý´´½¨¡±¹ý³Ì£¬Í¼½âÈçÏ£º

£¨»ÒÉ«±³¾°¾ÍÊÇÔÚ¿Õº¯Êý»ù´¡ÉÏÔö¼ÓµÄÊôÐÔ£©

¼òµ¥ËµÔ­Ð;ÍÊǺ¯ÊýµÄÒ»¸öÊôÐÔ£¬ÔÚº¯ÊýµÄ´´½¨¹ý³ÌÖÐÓÉjs±àÒëÆ÷×Ô¶¯Ìí¼Ó¡£

ÄÇôԭÐÍÓÐʲôÓÃÄØ£¿

ÏÈÁ˽âÏÂnewÔËËã·û£¬ÈçÏ£º

var a1 = new A;
var a2 = new A;

ÕâÊÇͨ¹ý¹¹Ô캯ÊýÀ´´´½¨¶ÔÏóµÄ·½Ê½£¬ÄÇô´´½¨¶ÔÏóΪʲôҪÕâÑù´´½¨¶ø²»ÊÇÖ±½Óvar a1 = {};ÄØ£¿Õâ¾ÍÉæ¼°newµÄ¾ßÌå²½ÖèÁË£¬ÕâÀïµÄnew²Ù×÷¿ÉÒÔ·Ö³ÉÈý²½(ÒÔa1µÄ´´½¨ÎªÀý)£º

1¡¢Ð½¨Ò»¸ö¶ÔÏ󲢸³Öµ¸ø±äÁ¿a1£ºvar a1 = {};

2¡¢°ÑÕâ¸ö¶ÔÏóµÄ[[Prototype]]ÊôÐÔÖ¸Ïòº¯ÊýAµÄÔ­ÐͶÔÏó£ºa1.[[Prototype]] = A.prototype

3¡¢µ÷Óú¯ÊýA£¬Í¬Ê±°ÑthisÖ¸Ïò1Öд´½¨µÄ¶ÔÏóa1£¬¶Ô¶ÔÏó½øÐгõʼ»¯£ºA.apply(a1,arguments)

Æä½á¹¹Í¼Ê¾ÈçÏ£º

´ÓͼÖп´µ½£¬ÎÞÂÛÊǶÔÏóa1»¹ÊÇa2£¬¶¼ÓÐÒ»¸öÊôÐÔ±£´æÁ˶Ժ¯ÊýAµÄÔ­ÐͶÔÏóµÄÒýÓ㬶ÔÓÚÕâЩ¶ÔÏóÀ´Ëµ£¬Ò»Ð©¹«Óõķ½·¨¿ÉÒÔÔÚº¯ÊýµÄÔ­ÐÍÖÐÕÒµ½£¬½ÚÊ¡ÁËÄÚ´æ¿Õ¼ä¡£

ËÄ¡¢Ô­ÐÍÁ´

Á˽âÁËnewÔËËã·ûÒÔ¼°Ô­Ð͵Ä×÷ÓÃÖ®ºó£¬Ò»ÆðÀ´¿´¿´Ê²Ã´ÊÇ[[Prototype]]£¿ÒÔ¼°¶ÔÏóÈçºÎÑØ×ÅÕâ¸öÒýÓÃÀ´½øÐÐÊôÐԵIJéÕÒ£¿

ÔÚjsµÄÊÀ½çÀÿ¸ö¶ÔÏóĬÈ϶¼ÓÐÒ»¸ö[[Prototype]]ÊôÐÔ£¬Æä±£´æ×ŵĵØÖ·¾Í¹¹³ÉÁ˶ÔÏóµÄÔ­ÐÍÁ´£¬ËüÊÇÓÉjs±àÒëÆ÷ÔÚ¶ÔÏó ±»´´½¨ µÄʱºò×Ô¶¯Ìí¼ÓµÄ£¬ÆäȡֵÓÉnewÔËËã·ûµÄÓÒ²à²ÎÊý¾ö¶¨£ºµ±ÎÒÃÇvar object1 = {};µÄʱºò£¬object1µÄ[[Prototype]]¾ÍÖ¸ÏòObject¹¹Ô캯ÊýµÄÔ­ÐͶÔÏó£¬ÒòΪvar object1 = {};ʵÖÊÉϵÈÓÚvar object = new Object();£¨Ô­Òò¿É²ÎÕÕÉÏÊö¶Ônew AµÄ·ÖÎö¹ý³Ì£©¡£

¶ÔÏóÔÚ²éÕÒij¸öÊôÐÔµÄʱºò£¬»áÊ×ÏȱéÀú×ÔÉíµÄÊôÐÔ£¬Èç¹ûûÓÐÔò»á¼ÌÐø²éÕÒ[[Prototype]]ÒýÓõĶÔÏó£¬Èç¹ûÔÙûÓÐÔò¼ÌÐø²éÕÒ[[Prototype]].[[Prototype]]ÒýÓõĶÔÏó£¬ÒÀ´ÎÀàÍÆ£¬Ö±µ½[[Prototype]].¡­.[[Prototype]]Ϊundefined£¨ObjectµÄ[[Prototype]]¾ÍÊÇundefined£©

ÈçÉÏͼËùʾ£º

//ÎÒÃÇÏëÒª»ñÈ¡a1.fGetName
alert(a1.fGetName);//Êä³öundefined
//1¡¢±éÀúa1¶ÔÏó±¾Éí
//½á¹ûa1¶ÔÏó±¾ÉíûÓÐfGetNameÊôÐÔ
//2¡¢ÕÒµ½a1µÄ[[Prototype]]£¬Ò²¾ÍÊÇÆä¶ÔÓ¦µÄ¶ÔÏóA.prototype£¬Í¬ //½á¹ûA.prototypeҲûÓÐÕâ¸öÊôÐÔ
//3¡¢ÕÒµ½A.prototype¶ÔÏóµÄ[[Prototype]]£¬Ö¸ÏòÆä¶ÔÓ¦µÄ¶ÔÏóObject.prototype
//½á¹ûObject.prototypeҲûÓÐfGetName
//4¡¢ÊÔͼѰÕÒObject.prototypeµÄ[[Prototype]]ÊôÐÔ£¬½á¹û·µ»Øundefined£¬Õâ¾ÍÊÇa1.fGetNameµÄÖµ

¼òµ¥Ëµ¾ÍÊÇͨ¹ý¶ÔÏóµÄ[[Prototype]]±£´æ¶ÔÁíÒ»¸ö¶ÔÏóµÄÒýÓã¬Í¨¹ýÕâ¸öÒýÓÃÍùÉϽøÐÐÊôÐԵIJéÕÒ£¬Õâ¾ÍÊÇÔ­ÐÍÁ´¡£

Îå¡¢¼Ì³Ð

ÓÐÁËÔ­ÐÍÁ´µÄ¸ÅÄ¾Í¿ÉÒÔ½øÐм̳С£

function B() {};

Õâ¸öʱºò²úÉúÁËBµÄÔ­ÐÍB.prototype

Ô­Ðͱ¾Éí¾ÍÊÇÒ»¸öObject¶ÔÏó£¬ÎÒÃÇ¿ÉÒÔ¿´¿´ÀïÃæ·Å×ÅÄÄЩÊý¾Ý

B.prototype ʵ¼ÊÉϾÍÊÇ {constructor : B , [[Prototype]] : Object.prototype}

ÒòΪprototype±¾ÉíÊÇÒ»¸öObject¶ÔÏóµÄʵÀý£¬ËùÒÔÆäÔ­ÐÍÁ´Ö¸ÏòµÄÊÇObjectµÄÔ­ÐÍ

B.prototype = A.prototype;//Ï൱ÓÚ°ÑBµÄprototypeÖ¸ÏòÁËAµÄprototype£»
ÕâÑùÖ»ÊǼ̳ÐÁËAµÄprototype·½·¨£¬AÖеÄ×Ô¶¨Òå·½·¨Ôò²»¼Ì³Ð
B.prototype.thisisb = "this is constructor B";//ÕâÑùÒ²»á¸Ä±äaµÄprototype

µ«ÊÇÎÒÃÇÖ»Ïë°ÑBµÄÔ­ÐÍÁ´Ö¸ÏòA£¬ÈçºÎʵÏÖ£¿

µÚÒ»ÖÖÊÇͨ¹ý¸Ä±äÔ­ÐÍÁ´ÒýÓõØÖ·

B.prototype.__proto__ = A.prototype;

ECMAÖв¢Ã»ÓÐ__proto__Õâ¸ö·½·¨£¬Õâ¸öÊÇff¡¢chromeµÈjs½âÊÍÆ÷Ìí¼ÓµÄ£¬µÈͬÓÚEMCAµÄ[[Prototype]]£¬Õâ²»ÊDZê×¼·½·¨£¬ÄÇôÈçºÎÔËÓñê×¼·½·¨ÄØ£¿

ÎÒÃÇÖªµÀnew²Ù×÷µÄʱºò£¬Êµ¼ÊÉÏÖ»ÊǰÑʵÀý¶ÔÏóµÄÔ­ÐÍÁ´Ö¸ÏòÁ˹¹Ô캯ÊýµÄprototypeµØÖ·¿é£¬ÄÇôÎÒÃÇ¿ÉÒÔÕâÑù²Ù×÷

B.prototype = new A();

ÕâÑù²úÉúµÄ½á¹ûÊÇ£º

²úÉúÒ»¸öAµÄʵÀý£¬Í¬Ê±¸³Öµ¸øBµÄÔ­ÐÍ£¬Ò²¼´B.prototype Ï൱ÓÚ¶ÔÏó {width :10 , data : [1,2,3] , key : "this is A" , [[Prototype]] : A.prototype}

ÕâÑù¾Í°ÑAµÄÔ­ÐÍͨ¹ýB.prototype.[[Prototype]]Õâ¸ö¶ÔÏóÊôÐÔ±£´æÆðÀ´£¬¹¹³ÉÁËÔ­Ð͵ÄÁ´½Ó

µ«ÊÇ×¢Ò⣬ÕâÑùB²úÉúµÄ¶ÔÏóµÄ¹¹Ô캯Êý·¢ÉúÁ˸ı䣬ÒòΪÔÚBÖÐûÓÐconstructorÊôÐÔ£¬Ö»ÄÜ´ÓÔ­ÐÍÁ´ÕÒµ½A.prototype£¬¶Á³öconstructor:A

var b = new B;
console.log(b.constructor);//output A

ËùÒÔÎÒÃÇ»¹ÒªÈËΪÉè»ØB±¾Éí

B.prototype.constructor = B;
//ÏÖÔÚBµÄÔ­Ð;ͱä³ÉÁË{width :10 , data : [1,2,3] , key : "this is A" , [[Prototype]] : A.prototype , constructor : B}
console.log(b.constructor);//output B
//ͬʱBÖ±½Óͨ¹ýÔ­Ðͼ̳ÐÁËAµÄ×Ô¶¨ÒåÊôÐÔwidthºÍname
console.log(b.data);//output [1,2,3]
//ÕâÑùµÄ»µ´¦¾ÍÊÇ
b.data.push(4);//Ö±½Ó¸Ä±äÁËprototypeµÄdataÊý×飨ÒýÓã©
var c = new B;
alert(c.data);//output [1,2,3,4]
//ÆäʵÎÒÃÇÏëÒªµÄÖ»ÊÇÔ­ÐÍÁ´£¬AµÄ×Ô¶¨ÒåÊôÐÔÎÒÃÇÏëÔÚBÖнøÐж¨Ò壨¶ø²»ÊÇÔÚprototype£©
//¸ÃÈçºÎ½øÐм̳У¿
//¼ÈÈ»ÎÒÃDz»ÏëÒªAÖÐ×Ô¶¨ÒåµÄÊôÐÔ£¬ÄÇô¿ÉÒÔÏë°ì·¨°ÑÆä¹ýÂ˵ô
//¿ÉÒÔн¨Ò»¸ö¿Õº¯Êý
function F(){}
//°Ñ¿Õº¯ÊýµÄÔ­ÐÍÖ¸Ïò¹¹Ô캯ÊýAµÄÔ­ÐÍ
F.prototype = A.prototype;
//Õâ¸öʱºòÔÙͨ¹ýnew²Ù×÷°ÑB.prototypeµÄÔ­ÐÍÁ´Ö¸ÏòFµÄÔ­ÐÍ
B.prototype = new F;
//Õâ¸öʱºòBµÄÔ­Ðͱä³ÉÁË{[[Prototype]] : F.prototype}
//ÕâÀïF.prototypeÆäʵֻÊÇÒ»¸öµØÖ·µÄÒýÓÃ
//µ«ÊÇÓÉB´´½¨µÄʵÀýÆäconstructorÖ¸ÏòÁËA£¬ËùÒÔÕâÀïÒªÏÔʾÉèÖÃÒ»ÏÂB.prototypeµÄconstructorÊôÐÔ
B.prototype.constructor = B;
//Õâ¸öʱºòBµÄÔ­Ðͱä³ÉÁË{constructor : B , [[Prototype]] : F.prototype}
//ÕâÑù¾ÍʵÏÖÁËB¶ÔAµÄÔ­Ðͼ̳Ð

ͼʾÈçÏ£¬ÆäÖкìÉ«²¿·Ö´ú±íÔ­ÐÍÁ´£º

   
2132 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢