ECMAScript Ð޸ĶÔÏó

ͨ¹ýʹÓà ECMAScript£¬²»½ö¿ÉÒÔ´´½¨¶ÔÏ󣬻¹¿ÉÒÔÐÞ¸ÄÒÑÓжÔÏóµÄÐÐΪ¡£

prototype ÊôÐÔ²»½ö¿ÉÒÔ¶¨Òå¹¹Ô캯ÊýµÄÊôÐԺͷ½·¨£¬»¹¿ÉÒÔΪ±¾µØ¶ÔÏóÌí¼ÓÊôÐԺͷ½·¨¡£

´´½¨Ð·½·¨

ͨ¹ýÒÑÓеķ½·¨´´½¨Ð·½·¨

¿ÉÒÔÓà prototype ÊôÐÔΪÈκÎÒÑÓеÄÀඨÒåз½·¨£¬¾ÍÏñ´¦Àí×Ô¼ºµÄÀàÒ»Ñù¡£ÀýÈ磬»¹¼ÇµÃ Number ÀàµÄ toString() ·½·¨Âð£¿Èç¹û¸øËü´«µÝ²ÎÊý 16£¬Ëü½«Êä³öÊ®Áù½øÖƵÄ×Ö·û´®¡£Èç¹ûÕâ¸ö·½·¨µÄ²ÎÊýÊÇ 2£¬ÄÇôËü½«Êä³ö¶þ½øÖƵÄ×Ö·û´®¡£ÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸ö·½·¨£¬¿ÉÒÔ°ÑÊý×Ö¶ÔÏóÖ±½Óת»»ÎªÊ®Áù½øÖÆ×Ö·û´®¡£´´½¨Õâ¸ö·½·¨·Ç³£¼òµ¥£º

Number.prototype.toHexString = function() {
  return this.toString(16);
};

ÔÚ´Ë»·¾³ÖУ¬¹Ø¼ü×Ö this Ö¸Ïò Number µÄʵÀý£¬Òò´Ë¿ÉÍêÈ«·ÃÎÊ Number µÄËùÓз½·¨¡£ÓÐÁËÕâ¶Î´úÂ룬¿ÉʵÏÖÏÂÃæµÄ²Ù×÷£º

var iNum = 15;
alert(iNum.toHexString());		//Êä³ö "F"

TIY

ÓÉÓÚÊý×Ö 15 µÈÓÚÊ®Áù½øÖÆÖÐµÄ F£¬Òò´Ë¾¯¸æ½«ÏÔʾ "F"¡£

ÖØÃüÃûÒÑÓз½·¨

ÎÒÃÇ»¹¿ÉÒÔΪÒÑÓеķ½·¨ÃüÃû¸üÒ×¶®µÄÃû³Æ¡£ÀýÈ磬¿ÉÒÔ¸ø Array ÀàÌí¼ÓÁ½¸ö·½·¨ enqueue() ºÍ dequeue()£¬Ö»ÈÃËüÃÇ·´¸´µ÷ÓÃÒÑÓÐµÄ push() ºÍ shift() ·½·¨¼´¿É£º

Array.prototype.enqueue = function(vItem) {
  this.push(vItem);
};

Array.prototype.dequeue = function() {
  return this.shift();
};

TIY

Ìí¼ÓÓëÒÑÓз½·¨Î޹صķ½·¨

µ±È»£¬»¹¿ÉÒÔÌí¼ÓÓëÒÑÓз½·¨Î޹صķ½·¨¡£ÀýÈ磬¼ÙÉèÒªÅжÏij¸öÏîÔÚÊý×éÖеÄλÖã¬Ã»Óб¾µØ·½·¨¿ÉÒÔ×öÕâÖÖÊÂÇé¡£ÎÒÃÇ¿ÉÒÔÇáËɵش´½¨ÏÂÃæµÄ·½·¨£º

Array.prototype.indexOf = function (vItem) {
  for (var i=0; i<this.length; i++) {
    if (vItem == this[i]) {
	  return i;
	}
  }

  return -1;
}

¸Ã·½·¨ indexOf() Óë String ÀàµÄͬÃû·½·¨±£³ÖÒ»Ö£¬ÔÚÊý×éÖмìË÷ÿ¸öÏֱµ½·¢ÏÖÓë´«½øÀ´µÄÏîÏàͬµÄÏîĿΪֹ¡£Èç¹ûÕÒµ½ÏàͬµÄÏÔò·µ»Ø¸ÃÏîµÄλÖ㬷ñÔò£¬·µ»Ø -1¡£ÓÐÁËÕâÖÖ¶¨Ò壬ÎÒÃÇ¿ÉÒÔ±àдÏÂÃæµÄ´úÂ룺

var aColors = new Array("red","green","blue");
alert(aColors.indexOf("green"));	//Êä³ö "1"

TIY

Ϊ±¾µØ¶ÔÏóÌí¼Óз½·¨

×îºó£¬Èç¹ûÏë¸ø ECMAScript ÖÐÿ¸ö±¾µØ¶ÔÏóÌí¼Óз½·¨£¬±ØÐëÔÚ Object ¶ÔÏóµÄ prototype ÊôÐÔÉ϶¨ÒåËü¡£Ç°ÃæµÄÕ½ÚÎÒÃǽ²¹ý£¬ËùÓб¾µØ¶ÔÏ󶼼̳ÐÁË Object ¶ÔÏó£¬ËùÒÔ¶Ô Object ¶ÔÏó×öÈκθı䣬¶¼»á·´Ó¦ÔÚËùÓб¾µØ¶ÔÏóÉÏ¡£ÀýÈ磬Èç¹ûÏëÌí¼ÓÒ»¸öÓþ¯¸æÊä³ö¶ÔÏóµÄµ±Ç°ÖµµÄ·½·¨£¬¿ÉÒÔ²ÉÓÃÏÂÃæµÄ´úÂ룺

Object.prototype.showValue = function () {
  alert(this.valueOf());
};

var str = "hello";
var iNum = 25;
str.showValue();		//Êä³ö "hello"
iNum.showValue();		//Êä³ö "25"

TIY

ÕâÀString ºÍ Number ¶ÔÏó¶¼´Ó Object ¶ÔÏó¼Ì³ÐÁË showValue() ·½·¨£¬·Ö±ðÔÚËüÃǵĶÔÏóÉϵ÷Óø÷½·¨£¬½«ÏÔʾ "hello" ºÍ "25"¡£

ÖØ¶¨ÒåÒÑÓз½·¨

¾ÍÏñÄܸøÒÑÓеÄÀඨÒåз½·¨Ò»Ñù£¬Ò²¿ÉÖØ¶¨ÒåÒÑÓеķ½·¨¡£ÈçÇ°ÃæµÄÕ½ÚËùÊö£¬º¯ÊýÃûÖ»ÊÇÖ¸Ïòº¯ÊýµÄÖ¸Õ룬Òò´Ë¿ÉÒÔÇáËɵØÖ¸ÏòÆäËûº¯Êý¡£Èç¹ûÐÞ¸ÄÁ˱¾µØ·½·¨£¬Èç toString()£¬»á³öÏÖʲôÇé¿öÄØ£¿

Function.prototype.toString = function() {
  return "Function code hidden";
}

Ç°ÃæµÄ´úÂëÍêÈ«ºÏ·¨£¬ÔËÐнá¹ûÍêÈ«·ûºÏÔ¤ÆÚ£º

function sayHi() {
  alert("hi");
}

alert(sayHi.toString());	//Êä³ö "Function code hidden"

TIY

Ò²ÐíÄ㻹¼ÇµÃ£¬Function ¶ÔÏóÕâÒ»ÕÂÖнéÉܹý Function µÄ toString() ·½·¨Í¨³£Êä³öµÄÊǺ¯ÊýµÄÔ´´úÂë¡£¸²¸Ç¸Ã·½·¨£¬¿ÉÒÔ·µ»ØÁíÒ»¸ö×Ö·û´®£¨ÔÚÕâ¸öÀý×ÓÖУ¬¿ÉÒÔ·µ»Ø "Function code hidden"£©¡£²»¹ý£¬toString() Ö¸ÏòµÄԭʼº¯ÊýÔõôÁËÄØ£¿Ëü½«±»ÎÞÓô洢µ¥Ôª»ØÊÕ³ÌÐò»ØÊÕ£¬ÒòΪËü±»ÍêÈ«·ÏÆúÁË¡£Ã»ÓÐÄܹ»»Ö¸´Ô­Ê¼º¯ÊýµÄ·½·¨£¬ËùÒÔÔÚ¸²¸Çԭʼ·½·¨Ç°£¬±È½Ï°²È«µÄ×ö·¨ÊÇ´æ´¢ËüµÄÖ¸Õ룬ÒÔ±ãÒÔºóµÄʹÓá£ÓÐʱÄãÉõÖÁ¿ÉÄÜÔÚз½·¨Öе÷ÓÃԭʼ·½·¨£º

Function.prototype.originalToString = Function.prototype.toString;

Function.prototype.toString = function() {
  if (this.originalToString().length > 100) {
    return "Function too long to display.";
  } else {
    return this.originalToString();
  }
};

TIY

ÔÚÕâ¶Î´úÂëÖУ¬µÚÒ»ÐдúÂë°Ñ¶Ôµ±Ç° toString() ·½·¨µÄÒýÓñ£´æÔÚÊôÐÔ originalToString ÖС£È»ºóÓö¨ÖƵķ½·¨¸²¸ÇÁË toString() ·½·¨¡£Ð·½·¨½«¼ì²é¸Ãº¯ÊýÔ´´úÂëµÄ³¤¶ÈÊÇ·ñ´óÓÚ 100¡£Èç¹ûÊÇ£¬¾Í·µ»Ø´íÎóÐÅÏ¢£¬ËµÃ÷¸Ãº¯Êý´úÂëÌ«³¤£¬·ñÔòµ÷Óà originalToString() ·½·¨£¬·µ»Øº¯ÊýµÄÔ´´úÂë¡£

¼«Íí°ó¶¨£¨Very Late Binding£©

´Ó¼¼ÊõÉϽ²£¬¸ù±¾²»´æÔÚ¼«Íí°ó¶¨¡£±¾Êé²ÉÓøÃÊõÓïÃèÊö ECMAScript ÖеÄÒ»ÖÖÏÖÏ󣬼´Äܹ»ÔÚ¶ÔÏóʵÀý»¯ºóÔÙ¶¨ÒåËüµÄ·½·¨¡£ÀýÈ磺

var o = new Object();

Object.prototype.sayHi = function () {
  alert("hi");
};

o.sayHi();

TIY

ÔÚ´ó¶àÊý³ÌÐòÉè¼ÆÓïÑÔÖУ¬±ØÐëÔÚʵÀý»¯¶ÔÏó֮ǰ¶¨Òå¶ÔÏóµÄ·½·¨¡£ÕâÀ·½·¨ sayHi() ÊÇÔÚ´´½¨ Object ÀàµÄÒ»¸öʵÀýÖ®ºóÀ´Ìí¼Ó½øÀ´µÄ¡£ÔÚ´«Í³ÓïÑÔÖв»½öûÌý˵¹ýÕâÖÖ²Ù×÷£¬Ò²Ã»Ìý˵¹ý¸Ã·½·¨»¹»á×Ô¶¯¸³Óè Object ¶ÔÏóµÄʵÀý²¢ÄÜÁ¢¼´Ê¹Ó㨽ÓÏÂÀ´µÄÒ»ÐУ©¡£

×¢Ò⣺²»½¨ÒéʹÓü«Íí°ó¶¨·½·¨£¬ÒòΪºÜÄÑ¶ÔÆä¸ú×ٺͼǼ¡£²»¹ý£¬»¹ÊÇÓ¦¸ÃÁ˽âÕâÖÖ¿ÉÄÜ¡£

VUE