一、创建新的方法
利用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(); } };