JS模拟面向对象全解(六、扩展方法)

来源:互联网 发布:网易云网络连接失败 编辑:程序博客网 时间:2024/05/01 21:56

C#的扩展方法大家都知道不?就是可以为当前环境中的其他对象添加新的方法,即使你手中没有该对象的源代码。

JS就可以用原型来搞定!
Number.prototype.toHexString = function() {  return this.toString(16);};var iNum = 15;alert(iNum.toHexString());        //输出 "F"


上面的代码,就为Number对象添加了一个新的方法,toHexString,到十六进制文本。
因为原型属性是该对象所有实例均具有的属性,类似静态,但可以获得this指针。
这样一来,为已有的对象添加原型属性就特别类似C#的扩展方法。其实不仅是类似,他根本就可以实现。
————
再举一个为Array增加indexOf函数的例子:
Array.prototype.indexOf = function (vItem) {  for (var i=0; i<this.length; i++) {    if (vItem == this[i]) {      return i;    }  }  return -1;}var aColors = new Array("red","green","blue");alert(aColors.indexOf("green"));    //输出 "1"


————
因为所有对象均源自Object,因此,如果想为所有对象添加一个新方法:
Object.prototype.showValue = function () {  alert(this.valueOf());};var str = "hello";var iNum = 25;str.showValue();        //输出 "hello"iNum.showValue();        //输出 "25"


————
同时,利用它也可以重写对象的某函数:
Function.prototype.toString = function() {  return "Function code hidden";}function sayHi() {  alert("hi");}alert(sayHi.toString());    //输出 "Function code hidden"



上例就利用原型函数的“新换旧”覆盖,实现了对函数代码的隐藏(函数对象的toString会返回函数的实现代码)
————
自此,JS模拟面向对象的教程结束。感谢大家的阅读与支持!