一、建立新的方法
利用Prototype屬性為任何已有的類定義新方法,就像處理自己的類一樣。例如,還記得Number類的tostring()方法嗎,如果傳遞16,它將輸出十六進位的字串。難道用toHexstring()方法處理這個操作不是更好嗎?建立它很簡單:
Number.prototype.toHexstring = function(){ return this.toString(16);}
在此環境中,關鍵字this指向Number的執行個體,因此可完全訪問Number的所有方法。有了這段代碼,可實現下面操作:
var iNum = 15;alert(iNum.toHexstring()); //outputs "F"
二、重定義已有的方法
就像能給已有的類定義新方法一樣,也可重定義已有的方法。函數名只是指向函數的指標,因為可以輕易地指向其他函數。如果修改了本地方法,如toString(),會出現什麼情況?
Function.prototype.toString = function () { return "Function code hidden";}
前面的代碼完全合法,運行結果完全符合預期:
function sayHi(){ alert("hi");} alert(sayHi.tostring()); //outputs "Function code hidden"
有時你甚至可能在新方法中調用原始方法:
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(); }};