浅析用原型定义自己的方法
原型是一种在IE 4及其后期版本中引入某类的对象的方法,其特殊之处在于它是将方法添加到类对象中的一种方法:首先,我们需要先理解类的概念。Javascript本身是一个面向对象的语言,所涉及的因素取决于一个特定的类根据其属性。我们常见的类别包括:数组变量(数组),逻辑变量(布尔)、日期(日期),变结构变量(函数),数值变量(数),对象变量(对象),一个字符串变量(字符串),以及相关的类的方法经常被使用,程序员(这里区分方法和属性之间的关注,例如)推方法阵列和获得系列方法日期,拆分字符串的方法等,
但在实际的编程过程中,我不知道现有的方法是否存在缺陷,原型方法应运而生!下面,我们将通过一个例子来说明原型的具体用法。
1。最简单的原型例子:
(1)number.add(努姆):功能、数字加法
实施方法:number.prototype.add =功能(NUM){ return(这+ Num);}
测试:警报((3).添加(15))- > 18
(2)boolean.rev():函数、布尔变量反演
实施方法:boolean.prototype.rev =函数(){ return(!这);}
测试:警报((true))。雷夫(false)- >显示
很简单吗本节只是告诉读者它是这样使用的一种方式。
2,实现和增强现有的方法,第一个原型:
(1)Array.push(new_element)
函数:在数组的结尾添加一个新元素。
实现方法:
复制代码代码如下所示:
Array.prototype.push =功能(new_element){
这{ } = new_element长度;
返回this.length;
}
让我们进一步加强他,这样他就可以一次添加多个元素!
实现方法:
复制代码代码如下所示:
array.prototype.pushpro =函数(){
var CurrentLength = this.length;
对于(var i = 0;i < arguments.length;i++){
这{ CurrentLength +我} = {我}参数;
}
返回this.length;
}
应该很难理解吗等等,你可以考虑如何提高Array.pop删除任意位置、任意数量的元素(具体代码不再这里。)
(2)string.length
效果:这实际上是字符串类的一个属性,但是由于Javascript,全宽度半角被认为是一个字符,在一些实际应用中可能会引起一些问题,我们原型来弥补这个不足。
实现方法:
复制代码代码如下所示:
string.prototype.tlength =函数(){
var arr = this.match( / { ^ 设备- xff } / IG);
退货。长度+(ARR = = null0:arr.length);
}
测试:警告(AA AA(La。tlength))-> 8
其中使用的编码原理和方法有一些正则表达式和全宽度,属于其他两大类,本文无需解释,请参考相关材料。
3,新功能的实现深入到原型:在实际的编程中,它不仅是对现有方法的改进,而且是对更多功能的需求。接下来,我将给你们两个用原型解决实际问题的例子。
(1)string.left()
问题:VB应该知道左边的函数,n个字符从左边的字符串,但缺少全宽度,一半被视为字符串中产生的英文页面混合不能截取长度。
效果:从左弦截取N个字符,并支持整个半宽度字符的区分。
实现方法:
复制代码代码如下所示:
string.prototype.left =功能(num,模式){
如果(!返回(努姆));
var str = this.substr(0,努姆);
如果(!模式)返回STR;
var n = str. Tlength()- str.length;
Num = NUM parseInt(n / 2);
返回this.substr(0,努姆);
}
测试:警报(AAAA,左(4))
警报(AA左(4,TRUE))>显示AA。
该方法使用字符串。Tlength()方法,并有一些很好的新方法,结合传统的方法之间。
(2)date.daydiff()
函数:计算两个日期类型变量的间隔时间(年、月、日、周)。
实现方法:
复制代码代码如下所示:
date.prototype.daydiff =(CDate函数,模式){
尝试{
cdate.getyear();
} catch(e){
返回(0);
}
var基础= 60 * 60 * 24 * 1000;
VaR结果= math.abs(这个CDate);
开关(模式){
案例Y:
结果=基* 365;
打破;
案例M:
结果基* 365 12;
打破;
案例W:
结果=基* 7;
打破;
违约:
结果;
打破;
}
返回(math.floor(结果));
}
测试:警报((新)(日期)(。DayDiff(新的日期(2002,0,1))))-> 329
警报((新)(日期)(。DayDiff(新的日期(2002,0,1)),M))-> 10
当然,它可以进一步扩大,以获得小时,分钟,甚至几秒钟的反应。
(3)number.fact()
函数:一个数的阶乘
实现方法:
复制代码代码如下所示:
原型。事实=函数(){
VaR Num = math.floor(本);
如果(号码< 0)返回南方;
如果(Num = = 0民= = 1 | |)
返回1;
其他的
返回(Num *(num-1)。事实());
}
测试:警报(事实)(4)(24)-显示
该方法主要说明递归方法在原型法中也是可行的!