JS编程建议——64:建议通过Function扩展类型

建议64:建议通过Function扩展类型
JavaScript允许为语言的基本数据类型定义方法。通过为Object.prototype添加原型方法,该方法可被所有的对象使用。这样的方式对函数、数组、字符串、数字、正则表达式和布尔值都适用。例如,通过给Function. prototype增加方法,使该方法对所有函数可用。
Function.prototype.method = function(name, func) {

this.prototype[name] = func;
return this;

};
为Function.prototype增加一个method方法后,就不必使用prototype这个属性了,然后调用method方法直接为各种基本类型添加方法。
JavaScript并没有单独的整数类型,因此有时候只提取数字中的整数部分是必要的。JavaScript本身提供的取整方法有些不太好,下面通过为Number. prototype添加一个integer方法来改善它。
Number.method('integer', function() {

return Math[this < 0 ? 'ceil' : 'floor'](this);

});
document.writeln((-10 / 3).integer()); //-3
Number.method方法能够根据数字的正负来判断是使用Math.ceiling还是Math.floors,这样就避免了每次都编写上面的代码。
String.method('trim', function() {

return this.replace(/^\s+|\s+$/g, '');

});
document.writeln('"' + " abc ".trim() + '"'); // 'abc''
trim方法使用了一个正则表达式,把字符串中左右两侧的空格符清除掉。
通过为基本类型扩展方法,可以大大提高语言的表现力。由于JavaScript原型继承的本质,因此,所有原型方法立刻被赋予到所有的实例,即使该实例在原型方法创建之前就创建好了。
注意:基本类型的原型是公共结构,在扩展基类时务必小心,避免覆盖掉基类的原生方法。一个稳妥的做法就是在确定没有该方法时才添加它。
Function.prototype.method = function(name, func) {

if(!this.prototype[name]) {
    this.prototype[name] = func;
    return this;
}

};
另外, for in语句用在原型上时表现很糟糕。可以使用hasOwnProperty方法筛选出继承而来的属性,或者查找特定的类型。

时间: 2024-11-08 23:10:38

JS编程建议——64:建议通过Function扩展类型的相关文章

JS编程建议——18:比较function语句和function表达式

建议18:比较function语句和function表达式在JavaScript语言中,既有function语句,也有函数表达式,这是令人困惑的,因为它们看起来是相同的.一个function语句就是值为一个函数的var语句的简写形式.下面的语句: function f() {} 相当于: var f=function() {} 这里建议使用第二种形式,因为它能明确表示f是一个包含一个函数值的变量.要用好JavaScript这门语言,理解函数就是数值是很重要的. function语句在解析时会被提

JS编程建议——57:禁用Function构造函数

建议57:禁用Function构造函数定义函数的方法包括3种:function语句.Function构造函数和函数直接量.不管用哪种方法定义函数,它们都是Function对象的实例,并将继承Function对象所有默认或自定义的方法和属性.// 使用function语句编写函数function f(x){ return x; }// 使用Function()构造函数克隆函数var f = new Function("x", "return x;");// 使用函数直

JS编程建议——50:正确检测数组类型

建议50:正确检测数组类型由于数组和对象的数据同源性,导致在JavaScript编程中经常会出现:在必须使用数组时使用了对象,或者在必须使用对象时使用了数组.选用数组或对象的规则很简单:当属性名是小而连续的整数时,应该使用数组,或者当对属性的位置和排列顺序有要求时,应该使用数组.否则,使用对象.JavaScript语言对数组和对象的区别是混乱的.typeof运算符检测数组的类型是"object",这没有什么意义,因此在正确检测数组和对象方面JavaScript没有提供很多的机制.这时可

JS编程建议——78:正确理解执行上下文和作用域链

建议78:正确理解执行上下文和作用域链执行上下文(execution context)是ECMAScript规范中用来描述 JavaScript 代码执行的抽象概念.所有的 JavaScript 代码都是在某个执行上下文中运行的.在当前执行上下文中调用 function会进入一个新的执行上下文.该function调用结束后会返回到原来的执行上下文中.如果function在调用过程中抛出异常,并且没有将其捕获,有可能从多个执行上下文中退出.在function调用过程中,也可能调用其他的functi

对JavaScript客户端应用编程的一些建议

  这篇文章主要介绍了对JavaScript客户端应用编程的一些建议,主要针对MVC框架框架的一些相关使用问题,需要的朋友可以参考下 你可能注意到了,最近的一段时间越来越多的Web应用有变复杂的趋势,重心从服务端慢慢向着客户端转移. 这是个正常的趋势么?我不知道.支持和反对者的讨论就像是在讨论复活者和圣诞节哪一个更好一样; 很难说哪一方观点就是完全正确的.因此,本文不会探讨究竟哪一方是对的,不过我还是试图解释一下使用大家所熟知的面向对象编程也许可以成功的解决客户端编程中存在的一些问题. 不太规范

Node.js编程中客户端Session的使用详解

  这篇文章主要介绍了Node.js编程中客户端Session的使用详解,是Node.js入门学习中的基础知识,需要的朋友可以参考下 静态网站很容易扩展.你只需要全部缓存,不需要考虑从不同服务器组合有状态的内容给用户. 可惜,大多数Web应用使用有状态的内容提供个性化体验.如果你的应用可以登录,就需要记住用户的Session.经典的处理方法是客户端设置包含随机唯一Session标识的Cookie,被标识的Session数据保存到服务端. 扩展有状态服务 当扩展服务的时候,你肯定有三种选择: 不同

在IE下的JS编程需注意的内存释放问题

在IE下的JS编程中,以下的编程方式都会造成即使关闭IE也无法释放内存的问题,下面分类给出: 1.给DOM对象添加的属性是一个对象的引用.范例:var MyObject = {};document.getElementById('myDiv').myProp = MyObject;解决方法:在window.onunload事件中写上: document.getElementById('myDiv').myProp = null; 2.DOM对象与JS对象相互引用.范例:function Enca

js实现浏览本地文件并显示扩展名的方法_javascript技巧

本文实例讲述了js实现浏览本地文件并显示扩展名的方法.分享给大家供大家参考.具体如下: 这里用文件域浏览指定文件,可以显示该文件的扩展名,想想它可以用在哪里?可以用在文件上传系统上,用来判断上传的文件类型是否是合法类型,不是则不允许上传.再看看代码,不足10行,解决问题,正在学习javaScript的朋友,你也可参考参考哦. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-view-nav-file-ext-codes/ 具体代码如下: <

js键盘上下左右键怎么触发function

 这篇文章主要是对js键盘上下左右键怎么触发function 进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 代码如下: <script type="text/javascript">  function jumpPage() {      if (event.keyCode==37)//左  fun_a();  if (event.keyCode==38)//上  fun_b();  if (event.keyCode==39)//右  fun_c()