可以用prototype属性为任何已有的类定义新方法 ,就像处理自己的类一样。现为Number添加一个转十六进制的方法:
Number.prototype.toHexString = function(){
return this.toString(16);
}
var iNum =15;
alert(iNum.toHexString());//f
如果想给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"。
就像能给已有的类定义新方法一样,也可重定义已有的方法
。现对Function类的toString()函数重写,原有的toString()是返回Function的源代码 。
var fun = function(){ return 1; } alert(fun.toString());//输出上面的源码 Function.prototype.toString = function(){ return 'code hidden'; } alert(fun.toString());//code hidden
支持晚绑定
从技术上来说,根本不存在极晚绑定。但javaScript能够在对象实例化后再定义它的方法。例如:
var o = new Object(); Object.prototype.sayHi = function(){ alert('hi'); } o.sayHi();//hi