为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 相关文章推荐
js验证表单第二部分
Nov 25 Javascript
JavaScript的public、private和privileged模式
Dec 28 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
Sep 11 Javascript
web前端开发JQuery常用实例代码片段(50个)
Aug 28 Javascript
js面向对象编程总结
Feb 16 Javascript
原生js实现轮播图
Feb 27 Javascript
React Native 截屏组件的示例代码
Dec 06 Javascript
详解如何配置vue-cli3.0的vue.config.js
Aug 23 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
ES6 Promise对象的应用实例分析
Jun 27 Javascript
JQuery发送ajax请求时中文乱码问题解决
Nov 14 jQuery
小程序实现侧滑删除功能
Jun 25 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 存储文本换行实现方法
2010/01/05 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
2020/03/03 Javascript
Python命名空间详解
2014/08/18 Python
django 自定义用户user模型的三种方法
2014/11/18 Python
使用Python的PIL模块来进行图片对比
2016/02/18 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
20行python代码实现人脸识别
2019/05/05 Python
python aiohttp的使用详解
2019/06/20 Python
深入解析神经网络从原理到实现
2019/07/26 Python
python实现邮件自动发送
2019/08/10 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
python常量折叠基础知识点讲解
2021/02/28 Python
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
简历中个人求职的自我评价模板
2013/11/29 职场文书
八一建军节活动方案
2014/02/10 职场文书
财务主管岗位职责
2014/02/28 职场文书
本科生就业推荐信
2014/05/19 职场文书
劳动竞赛口号
2014/06/16 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
鲁冰花观后感
2015/06/10 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技