为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 相关文章推荐
firefox插件Firebug的使用教程
Jan 02 Javascript
一个js的tab切换效果代码[代码分离]
Apr 11 Javascript
jQuery获取和设置表单元素的方法
Feb 14 Javascript
JavaScript模仿Pinterest实现图片预加载功能
Oct 25 Javascript
wap手机端解决返回上一页的js实例
Dec 08 Javascript
jQuery图片切换动画效果
Feb 28 Javascript
bootstrap常用组件之头部导航实现代码
Apr 20 Javascript
让div运动起来 js实现缓动效果
Jul 06 Javascript
Vue2.0 组件传值通讯的示例代码
Aug 01 Javascript
js 提取某()特殊字符串长度的实例
Dec 06 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
Dec 29 Javascript
js 取消页面可以选中文字的功能方法
Jan 02 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
下载文件的点击数回填
2006/10/09 PHP
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
初步讲解Python中的元组概念
2015/05/21 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
python中range()与xrange()用法分析
2016/09/21 Python
详解python实现线程安全的单例模式
2018/03/05 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
python异步存储数据详解
2019/03/19 Python
pandas取出重复数据的方法
2019/07/04 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
会员卡清退活动总结
2014/08/27 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
python爬虫--selenium模块
2021/03/31 Python
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技