JavaScript中的动态扩展模式

注:本文中部分描述都是操作我的书《JavaScript高级应用与实践》而言,还请朋友们多多支持我的书,详情请见:

博主网站地址:

http://m9m.3322.org/doc/js/md00.jsp

“北京电子工业出版社”地址

http://www.phei.com.cn/bookshop/bookinfo.asp?bookcode=TP061230%20&booktype=main

所谓的“动态扩展模式”是指JavaScript中当一个对象已经实例化后,我们对对象的原型(prototype)上扩展相应的属性(方法也是一种属性,只是类型为function罢了),能够在这个已经实例化的对象上体现(正确访问)的特性叫做“动态扩展模式”。这是许多编程语言所无法比拟的特性——对已经实例的对象原型上扩展方法。

示例如下:

“函数扩展方式”是指通过在Function的原型上定义方法method为将来定义的类的原型上扩展属性的方式。
// 定义为对象原型上扩展属性的方法,这样设计的好处是简化原型扩展的累赘代码
// name :扩展的属性名称(函数也是一种属性),
// funcOrProp :扩展的属性值(可以是函数对象)
Function.prototype.method = function(name, funcOrProp)
{
this.prototype[name] = funcOrProp;
}
var myClass = function(){}; // 或者 function myClass(){}
// 显示姓名
myClass.method("displayName", function()
{
alert(this.name);
});
// 显示性别
myClass.method("displaySex", function()
{
alert(this.sex);
});
// 姓名、性别
myClass.method("name", "xiatian");
myClass.method("sex", "male");
// 使用:
var oMy = new myClass();
oMy.displayName();
oMy.displaySex();
// 对象实例化后,给他的原型上扩展方法,
// 依然能在已经实例化对象上正确访问,这就是“动态模式
// 但是注意,你不能改变已经实例化的对象的原型,
// 例如: oMy.prototype.name = "summer";
// 因为 prototype 只有在类、对象定义时能够使用,
// 实例化对象的 prototype 是无效的对象,
// 而实例化对象的 constructor 是可以被重新定义的
// oMy.constructor = function(){alert(99)} 】,
// 但是已经没有多大的实际意义了
// 当然,这里通过在 myClass.prototype. dspAll=function(){…}; 进行扩展效果也是一样的
myClass.method("dspAll", function()
{
alert([this.name, this.sex].join(","));
});
// 下面能正确访问,这也是本节描述的“动态扩展原型模式
oMy.dspAll();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值