【09类和模块】——4:类的扩充
2016-03-27 22:12
134 查看
我们在这里应该明白一点——javascript中基于原型的继承机制是动态的:对象从其原型继承属性,如果创建对象之后原型的属性发生了变化,也会影响到继承这个原型的所有实例对象。这就意味着我们可以通过给原型对象添加新方法来扩充javascript类。
既然这样,我们就可以给博文【09类和模块】——3:javascript中java式的类继承 中的Complex类添加新的方法
这里我们给Complex类添加一个计算复数共轭复数(两个实部相等,虚部互为相反数的两个复数互为共轭复数)的方法
javascript内置类的原型对象也是一样如此“开放”,也就是说可以给数字、字符串、数组、函数等数据类型添加方法;
例如:假设函数类上面没有bind()方法,我们通过类的扩展的方式给函数类添加一个bind()方法
这里还有一些其他的例子
假设String中不存在trim()方法,我们在这里通过类的扩展的方式来定义trim()方法
当然也可以给Object.prototype添加方法,从而使所有的对象都可以调用这些方法,但是这样的做法是不被推荐的,因为在ECMAScript5之前,是无法将这些新增的方法设置为不可枚举的(一个方法不可枚举才更像是内置的方法),如果给Object.prototype添加属性,这些属性是可以被for/in循环遍历到的。
期待阅读下一篇博文:【09类和模块】——5:构造函数名称
既然这样,我们就可以给博文【09类和模块】——3:javascript中java式的类继承 中的Complex类添加新的方法
这里我们给Complex类添加一个计算复数共轭复数(两个实部相等,虚部互为相反数的两个复数互为共轭复数)的方法
//返回当前复数的共轭复数 Complex.prototype.conj = function(){ return new Complex(this.r,-this.i) }
javascript内置类的原型对象也是一样如此“开放”,也就是说可以给数字、字符串、数组、函数等数据类型添加方法;
例如:假设函数类上面没有bind()方法,我们通过类的扩展的方式给函数类添加一个bind()方法
if(!Function.prototype.bind){ Function.prototype.bind=function(o/*,agrs*/){ //bind()方法的代码.... } }
这里还有一些其他的例子
//多次调用一个函数f,传入一个迭代数 //比如,要输出“hello”三次 Number.prototype.times=function(f,context){ var n=Number(this); for(var i=0;i<n;i++){ f.call(context,i) } } 调用函数 var n=3; n.times(function(n){console.log(n+'hellow')});
假设String中不存在trim()方法,我们在这里通过类的扩展的方式来定义trim()方法
String.prototype.trim=String.prototype.trim||function(){ if(!this) return this //空字符串不做处理 return this.replace(/^\s+|\s+$/g,"")//使用正则替换空格 }
当然也可以给Object.prototype添加方法,从而使所有的对象都可以调用这些方法,但是这样的做法是不被推荐的,因为在ECMAScript5之前,是无法将这些新增的方法设置为不可枚举的(一个方法不可枚举才更像是内置的方法),如果给Object.prototype添加属性,这些属性是可以被for/in循环遍历到的。
期待阅读下一篇博文:【09类和模块】——5:构造函数名称
相关文章推荐
- CCS v5.0打开项目文件时出现错误:“The project description file (.project) for 'test_ad' is missing. This file c”
- c语言:顺序栈的实现
- 【java】面试
- 字符串应用(4)排序
- Unity3D教程系列 新手入门,中度进阶神器
- (第四周)要开工了
- 8.4 stat--stat()函数的结果处理
- jdbc底层
- DOSbox汇编集成环境下的详细设置
- 8.4 stat--stat()函数的结果处理
- 关于mybatis标签属性说明
- 开源代码文献
- C++面向对象和流
- 珍惜现有的生活,珍惜关爱自己的人(摘)
- 敏捷开发方法综述
- 课本学习笔记3:第十八章 20135115臧文君
- mybatis映射关系
- Android中,单位dp、sp、px互相转换工具类
- iOS 开发技巧
- 九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题) C++版