通过prototype修改已有对象
可以用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