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"
ÓÉÓÚÊý×Ö 15 µÈÓÚÊ®Áù½øÖÆÖÐµÄ F£¬Òò´Ë¾¯¸æ½«ÏÔʾ "F"¡£
ÖØÃüÃûÒÑÓз½·¨
ÎÒÃÇ»¹¿ÉÒÔΪÒÑÓеķ½·¨ÃüÃû¸üÒ×¶®µÄÃû³Æ¡£ÀýÈ磬¿ÉÒÔ¸ø Array ÀàÌí¼ÓÁ½¸ö·½·¨ enqueue() ºÍ dequeue()£¬Ö»ÈÃËüÃÇ·´¸´µ÷ÓÃÒÑÓÐµÄ push() ºÍ shift() ·½·¨¼´¿É£º
Array.prototype.enqueue = function(vItem) {
this.push(vItem);
};
Array.prototype.dequeue = function() {
return this.shift();
};
Ìí¼ÓÓëÒÑÓз½·¨Î޹صķ½·¨
µ±È»£¬»¹¿ÉÒÔÌí¼ÓÓëÒÑÓз½·¨Î޹صķ½·¨¡£ÀýÈ磬¼ÙÉèÒªÅжÏ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"
Ϊ±¾µØ¶ÔÏóÌí¼Óз½·¨
×îºó£¬Èç¹ûÏë¸ø ECMAScript ÖÐÿ¸ö±¾µØ¶ÔÏóÌí¼Óз½·¨£¬±ØÐëÔÚ Object ¶ÔÏóµÄ prototype ÊôÐÔÉ϶¨ÒåËü¡£Ç°ÃæµÄÕ½ÚÎÒÃǽ²¹ý£¬ËùÓб¾µØ¶ÔÏ󶼼̳ÐÁË Object ¶ÔÏó£¬ËùÒÔ¶Ô Object ¶ÔÏó×öÈκθı䣬¶¼»á·´Ó¦ÔÚËùÓб¾µØ¶ÔÏóÉÏ¡£ÀýÈ磬Èç¹ûÏëÌí¼ÓÒ»¸öÓþ¯¸æÊä³ö¶ÔÏóµÄµ±Ç°ÖµµÄ·½·¨£¬¿ÉÒÔ²ÉÓÃÏÂÃæµÄ´úÂ룺
Object.prototype.showValue = function () {
alert(this.valueOf());
};
var str = "hello";
var iNum = 25;
str.showValue(); //Êä³ö "hello"
iNum.showValue(); //Êä³ö "25"
ÕâÀ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"
Ò²ÐíÄ㻹¼ÇµÃ£¬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();
}
};
ÔÚÕâ¶Î´úÂëÖУ¬µÚÒ»ÐдúÂë°Ñ¶Ôµ±Ç° toString() ·½·¨µÄÒýÓñ£´æÔÚÊôÐÔ originalToString ÖС£È»ºóÓö¨ÖƵķ½·¨¸²¸ÇÁË toString() ·½·¨¡£Ð·½·¨½«¼ì²é¸Ãº¯ÊýÔ´´úÂëµÄ³¤¶ÈÊÇ·ñ´óÓÚ 100¡£Èç¹ûÊÇ£¬¾Í·µ»Ø´íÎóÐÅÏ¢£¬ËµÃ÷¸Ãº¯Êý´úÂëÌ«³¤£¬·ñÔòµ÷Óà originalToString() ·½·¨£¬·µ»Øº¯ÊýµÄÔ´´úÂë¡£
¼«Íí°ó¶¨£¨Very Late Binding£©
´Ó¼¼ÊõÉϽ²£¬¸ù±¾²»´æÔÚ¼«Íí°ó¶¨¡£±¾Êé²ÉÓøÃÊõÓïÃèÊö ECMAScript ÖеÄÒ»ÖÖÏÖÏ󣬼´Äܹ»ÔÚ¶ÔÏóʵÀý»¯ºóÔÙ¶¨ÒåËüµÄ·½·¨¡£ÀýÈ磺
var o = new Object();
Object.prototype.sayHi = function () {
alert("hi");
};
o.sayHi();
ÔÚ´ó¶àÊý³ÌÐòÉè¼ÆÓïÑÔÖУ¬±ØÐëÔÚʵÀý»¯¶ÔÏó֮ǰ¶¨Òå¶ÔÏóµÄ·½·¨¡£ÕâÀ·½·¨ sayHi() ÊÇÔÚ´´½¨ Object ÀàµÄÒ»¸öʵÀýÖ®ºóÀ´Ìí¼Ó½øÀ´µÄ¡£ÔÚ´«Í³ÓïÑÔÖв»½öûÌý˵¹ýÕâÖÖ²Ù×÷£¬Ò²Ã»Ìý˵¹ý¸Ã·½·¨»¹»á×Ô¶¯¸³Óè Object ¶ÔÏóµÄʵÀý²¢ÄÜÁ¢¼´Ê¹Ó㨽ÓÏÂÀ´µÄÒ»ÐУ©¡£
×¢Ò⣺²»½¨ÒéʹÓü«Íí°ó¶¨·½·¨£¬ÒòΪºÜÄÑ¶ÔÆä¸ú×ٺͼǼ¡£²»¹ý£¬»¹ÊÇÓ¦¸ÃÁ˽âÕâÖÖ¿ÉÄÜ¡£