为JavaScript类型增加方法的实现代码(增加功能)


Posted in Javascript onDecember 29, 2011

javaScript的类型函数(如Number/String/Boolean/Array/Date/Obejct等)都是继承于 Function.prototype,所以给Function.prototype增加方法,同时也会影响到由它衍生的下层类型函数。如:

Function.prototype.addMethod=function(methodName,func){ 
if(!this[methodName]){ 
this[methodName]=func;//给类型增加方法,类似于类型的静态方法。func方法是赋于了类型而非实例。 
} 
return this;//this 将绑定到方法的调用对象(类型函数),返回this可以进行链式调用 
} 
Array.addMethod('testFun',function(){alert(this)}); 
//Array.testFun(); //function Array() {[native code]} 
Object.addMethod('testFun',function(){alert(this)}); 
//Object.testFun(); //function Object() {[native code]} 
Boolean.addMethod('testFun',function(){alert(this)}); 
//Boolean.testFun(); //function Boolean() {[native code]} 
function CustomObject(name,value){ 
this.name=name || 'CustomObject'; 
this.value=value || 0; 
this.toString=function(){return '[name:'+this.name+',value:'+this.value+']'} 
} 
CustomObject.addMethod('testFun',function(){alert(this)}); 
/* return: 
* function CustomObject(name, value) { 
this.name = name || "CustomObject"; 
this.value = value || 0; 
this.toString = function () {return "[name:" + this.name + ",value:" + this.value + "]";}; 
} 
*/ 
CustomObject.testFun();

此时如果用实例来调用的话,则会报错。如:
var customObject=new CustomObject(); //定义一个CustomObject实例 
customObject.testFun();//Error: temp.testFun is not a function

给实例增加方法
如果给类型实例增加方法,则应该把方法绑定到类型的prototype上。如
Function.prototype.addMethod=function(methodName,func){ 
if(!this.prototype[methodName]){ 
this.prototype[methodName]=func;//给原型增加方法,此方法会影响到该类型的实例上 
} 
return this.prototype;//返回原型,此类型实例可以进行链形调用 
} 
Object.addMethod('testFun',function(){alert(this)}); 
//({toString:function(){return '[Empty Object]'}}).testFun(); //[Empty Object] 
Number.addMethod('testFun',function(){alert(this)}); 
//(5).testFun(); //5 
String.addMethod('testFun',function(){alert(this)}); 
//'test'.testFun(); //'test' 
Boolean.addMethod('testFun',function(){alert(this)}); 
//true.testFun(); //true 
Array.addMethod('testFun',function(){alert(this)}); 
//(['a','b']).testFun(); //a,b 
Date.addMethod('testFun',function(){alert(this)}); 
//new Date().testFun(); //Tue Dec 27 2011 11:20:58 GMT-0800 (Pacific Standard Time) 
function CustomObject(name,value){ 
this.name=name || 'CustomObject'; 
this.value=value || 0; 
this.toString=function(){return '[name:'+this.name+',value:'+this.value+']'} 
} 
CustomObject.addMethod('testFun',function(){alert(this)}); 
var customObject=new CustomObject(); 
customObject.testFun(); //[name:CustomObject,value:0]

若此时用类型调用testFun,则会报错。如
Array.addMethod('testFun',function(){alert(this)}); 
//Array.testFun(); //Error: Array.testFun is not a function 
CustomObject.addMethod('testFun',function(){alert(this)}); 
CustomObject.testFun(); //Error: CustomObject.testFun is not a function
Javascript 相关文章推荐
jQuery 获取URL参数的插件
Mar 04 Javascript
THREE.JS入门教程(5)你应当知道的十件事
Jan 24 Javascript
使用JQuery实现的分页插件分享
Nov 05 Javascript
微信公众号 客服接口的开发实例详解
Sep 28 Javascript
js中toString()和String()区别详解
Mar 23 Javascript
jQuery实现百度登录框的动态切换效果
Apr 21 jQuery
Javascript中将变量转换为字符串的三种方法
Sep 19 Javascript
详解Angular6.0使用路由步骤(共7步)
Jun 29 Javascript
vue2.0父子组件间传递数据的方法
Aug 16 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
Jun 15 Javascript
vue回到顶部监听滚动事件详解
Aug 02 Javascript
js实现指定时间倒计时效果
Aug 26 Javascript
javaScript 利用闭包模拟对象的私有属性
Dec 29 #Javascript
Jquery中删除元素的实现代码
Dec 29 #Javascript
js的表单操作 简单计算器
Dec 29 #Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
Dec 29 #Javascript
JavaScript中两个感叹号的作用说明
Dec 28 #Javascript
javascript (用setTimeout而非setInterval)
Dec 28 #Javascript
js字符编码函数区别分析
Dec 28 #Javascript
You might like
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
JavaScript中的闭包
2016/02/24 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
Python中的数学运算操作符使用进阶
2016/06/20 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
python中二分查找法的实现方法
2020/12/06 Python
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
纪念建党演讲稿范文
2014/01/13 职场文书
九年级语文教学反思
2014/02/04 职场文书
党员个人整改措施
2014/10/24 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
大班下学期个人总结
2015/02/13 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
小学新课改心得体会
2016/01/22 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python