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


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模拟面向对象的教程结束。感谢大家的阅读与支持!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值