- 浏览: 165867 次
- 性别:
- 来自: 天津
文章分类
最新评论
今天刚刚接触js中对象的prototype属性,google过程中看到这样一篇文章觉得以后也许会用着,转载保存一下,原文地址是http://bokee.shinylife.net/blog/article.asp?id=455&page=2#comm_top
2、已有方法的实现和增强,初识 prototype:
(1) Array.push(new_element)
作用:在数组末尾加入一个新的元素
实现方法:
Array.prototype.push = function(new_element){
this[this.length]=new_element;
return this.length;
}
让我们进一步来增强他,让他可以一次增加多个元素!
实现方法:
Array.prototype.pushPro = function() {
var currentLength = this.length;
for (var i = 0; i < arguments.length; i++) {
this[currentLength + i] = arguments[i];
}
return this.length;
}
应该不难看懂吧?以此类推,你可以考虑一下如何通过增强 Array.pop 来实现删除任意位置,任意多个元素(具体代码就不再细说了)
(2) String.length
作用:这实际上是 String 类的一个属性,但是由于 JavaScript 将全角、半角均视为是一个字符,在一些实际运用中可能会造成一定的问题,现在我们通过 prototype 来弥补这部不足。
实现方法:
String.prototype.cnLength = function(){
var arr=this.match(/[^\x00-\xff]/ig);
return this.length+(arr==null?0:arr.length);
}
试验:alert("EaseWe空间Spaces".cnLength()) -> 显示 16
这里用到了一些正则表达式的方法和全角字符的编码原理,由于属于另两个比较大的类别,本文不加说明,请参考相关材料。
3、新功能的实现,深入 prototype:在实际编程中所用到的肯定不只是已有方法的增强,更多的实行的功能的要求,下面我就举两个用 prototype 解决实际问题的例子:
(1) String.left()
问题:用过 vb 的应该都知道left函数,从字符串左边取 n 个字符,但是不足是将全角、半角均视为是一个字符,造成在中英文混排的版面中不能截取等长的字符串
作用:从字符串左边截取 n 个字符,并支持全角半角字符的区分
实现方法:
String.prototype.left = function(num,mode){
if(!/\d+/.test(num))return(this);
var str = this.substr(0,num);
if(!mode) return str;
var n = str.Tlength() - str.length;
num = num - parseInt(n/2);
return this.substr(0,num);
}
试验:
alert("EaseWe空间Spaces".left(8)) -> 显示 EaseWe空间
alert("EaseWe空间Spaces".left(8,true)) -> 显示 EaseWe空
本方法用到了上面所提到的String.Tlength()方法,自定义方法之间也能组合出一些不错的新方法呀!
(2) Date.DayDiff()
作用:计算出两个日期型变量的间隔时间(年、月、日、周)
实现方法:
Date.prototype.DayDiff = function(cDate,mode){
try{
cDate.getYear();
}catch(e){
return(0);
}
var base =60*60*24*1000;
var result = Math.abs(this - cDate);
switch(mode){
case "y":
result/=base*365;
break;
case "m":
result/=base*365/12;
break;
case "w":
result/=base*7;
break;
default:
result/=base;
break;
}
return(Math.floor(result));
}
试验:alert((new Date()).DayDiff((new Date(2002,0,1)))) -> 显示 329
alert((new Date()).DayDiff((new Date(2002,0,1)),"m")) -> 显示 10
当然,也可以进一步扩充,得出响应的小时、分钟,甚至是秒。
(3) Number.fact()
作用:某一数字的阶乘
实现方法:
Number.prototype.fact=function(){
var num = Math.floor(this);
if(num<0)return NaN;
if(num==0 || num==1)
return 1;
else
return (num*(num-1).fact());
}
试验:alert((4).fact()) -> 显示 24
这个方法主要是说明了递归的方法在 prototype 方法中也是可行的!
发表评论
-
ajax下载文档 ClientAbortException: java.net.SocketException: Connection reset by pee
2013-08-28 13:58 2256众所周知ajax是使用了浏览器内部的XmlHttpRequ ... -
在js里引用另一个js文件
2013-08-28 10:58 791new_element=document.createE ... -
<转> js替换字符正则表达式
2013-08-16 14:28 778function replace() { var str ... -
<转> JQuery选择器
2013-08-16 10:24 826<html> <head> &l ... -
jQuery获取Select选择的Text和 Value(转)
2013-08-13 09:47 555jQuery获取Select选择的Text和Valu ... -
<转>javascript获取地址栏参数
2013-08-12 10:03 657function GetQueryString(name){v ... -
iframe子页面内刷新同页面中另一个iframe
2013-08-09 15:25 10511框架页面如下: <div id="a ... -
jquery动态修改链接的onclick方法
2013-08-07 11:29 2286用jquery动态修改链接的onclick方法的传递参数,在 ... -
《转》JS怎么刷新当前页面
2013-04-15 13:17 815reload 方法,该方法强迫 ... -
<转>iframe去掉横向滚动条
2012-05-15 14:45 1200如题,就是在网页中, ... -
ie onmouseup和onclick事件执行顺序
2012-05-14 17:21 1116今天项目要做个类似网 ... -
iframe同步刷新时好时坏问题
2012-04-19 17:04 1192页面由左右两个iframe组成,要求右面内容更新时(内容跟左面 ... -
js浮动效果
2012-02-14 17:29 982项目中某页面需要固定某个div内容,实际需求是这样的,有个评分 ... -
js判断页面关闭 仅支持IE6
2012-02-08 16:38 1618关闭页面时同时执行onbeforeunload和onunloa ... -
onpropertychange与输入法有关
2012-02-03 14:56 1157页面输入框经常有只允许输入数字的限制,一般都用onproper ... -
<转>name和function名字不能相同
2012-01-05 16:40 0今天突然碰到form表单的名字与js方法的名字相同导致找不到j ... -
onmousedown、onmouseup和onclick的奇怪问题
2011-07-08 10:04 2214将setTimeout的时间设置为0,告诉浏览器当它为当前任何 ... -
超链接<a>中属性href与target相冲突的地方
2011-03-25 11:47 1879今天在项目中写了两行代码,出现不同的效果: ①<a h ... -
<转>键盘回车事件导致页面刷新的问题
2011-03-24 11:18 850我最近在做一个 Ajax 查询的功能,代码如下: ... -
JS 字符串连接性能
2010-09-12 17:18 2126在W3SCHOOL中有讨论js字符串连接方法性能对比的篇章如下 ...
相关推荐
非常实用的prototype 例子,对于快速掌握prototype有很好的帮助
每一个构造函数都有一个属性叫做原型(prototype,下面都不再翻译,使用其原文)。这个属性非常有用:为一个特定类声明通用的变量或者函数。 prototype的定义 你不需要显式地声明一个prototype属性,因为在每一个构造...
这个属性非常有用:为一个特定类声明通用的变量或者函数。 prototype的定义 你不需要显式地声明一个prototype属性,因为在每一个构造函数中都有它的存在 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以...
prototype1.4及文档说明文件,是实现ajax的有用东东
在此存储库中,我试图收集由于[removed]解析和可用于演示影响的有用脚本小工具而容易受到原型污染的库的示例。 原型污染 姓名 有效载荷 参考 发现者 Wistia嵌入式视频(固定) ?__proto__[test]=test ?__proto__....
基于原型的内存网络的标签和代码用法在requirements.txt安装依赖项下载并解压缩images.zip ... @article{hua2021prototype, title={Aerial Scene Understanding in The Wild: Multi-Scene Recognition via Prototype-ba
Prototype一个JavaScript框架,很有用的呀!欢迎下载.欢迎欢迎。
很有用的资源,提供了很多重用的功能。同时可以学习里面的代码。
如果您正在使用不具有bind方法的浏览器,则很有用。 安装和使用 安装: npm install --save polyfill-function-prototype-bind 使用方法: require ( 'polyfill-function-prototype-bind' ) ; 注意:您只需要...
vue总是报Error Cannot find module 解决办法
关于这个模式,突然想到了小时候看的《西游记》,齐天大圣孙悟空再发飙的时候可以通过自己头上的 3 根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要)。 原型模式也正是提供了自我复制的功能,就是...
关于数组和类型数组的.findLast()和.findLastIndex()方法的建议。地位该提案是,正在等待反馈。动机在数组中查找元素是一种非常常见的编程模式。 该提案有一个主要问题:语义。 这意味着clearly representing the ...
类似于String.prototype.replace(),但尝试匹配要替换的子字符串的大小写。 请考虑关注该项目的作者 ,并考虑为该项目以显示您的 :red_heart: 和支持。 安装 使用安装: $ npm install --save replace-case ...
3 严禁将来历不明的移动存储介质(含磁盘、光盘、U 盘等)在设备、各系统服务器及网管电脑上使用。4 存放资料及数据的服务器或电脑应安装防毒软件实时监控网络病毒确保数据安全,定期更新病毒库数据,禁止接入外网。...
炒作原型小型库,用于扩展Hype( ),具有一些用于原型制作的有用功能。 哈希参数历史滑梯绿野仙踪TODO: 输入交互滚动互动
在Axure RP中建立Wireframe和Prototype可以幫助您快速且有效地分析需求、驗證設計並傳達給所有參與者,以確保在有限的專案時間與資源下,開發出有用和可用的應用程式。 傳統上,製作prototype 不但昂貴而且費時,讓...
虽然.filter是通过过滤掉不需要的项目来从您的收藏.filter中删除它们的有用方法,但并非总是希望简单地删除这些项目。 .reduce函数可以用于操作项目,但不能轻松满足根据您对项目应用的条件为您构建多个数
toArray | succ | times这里面一个有用的方法是inspect,按照参考手册的说明,他的作用是“返回该字符串针对调试的字符串表现形式(即用单引号或双引号包括起来,并使用 ‘\’ 对特殊字符进行转义)”,在Object...
Axure RP是一个快速绘制Wireframe 和... 在Axure RP中建立Wireframe和Prototype可以帮助您快速且有效地分析需求、验证设计并传达给所有参与者,以确保在有限的项目时间与资源下,开发出有用和可用的应用程序。
.match():一种非常有用的方法; 使用“ regex”变量作为参数,此方法将根据指定的字符串模式在数组中查找匹配项 第7天:Array Cardio第2天注意事项 array.prototype.every() :检查数组中的每个元素是否满足该...