`

prototype属性使用实例介绍

阅读更多

prototype属性使用实例介绍

    prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法,而且特殊的地方便在于:它是一个给类的对象添加方法的方法!这一点可能听起来会有点乱,别急,下面我便通过实例对这一特殊的方法作已下讲解:
  首先,我们要先了解一下类的概念,JavaScript 本身是一种面向对象的语言,它所涉及的元素根据其属性的不同都依附于某一个特定的类。我们所常见的类包括:数组变量(Array)、逻辑变量(Boolean)、日期变量(Date)、结构变量(Function)、数值变量(Number)、对象变量(Object)、字符串变量(String) 等,而相关的类的方法,也是程序员经常用到的(在这里要区分一下类的注意和属性发方法),例如数组的push方法、日期的get系列方法、字符串的split方法等等,
  但是在实际的编程过程中不知道有没有感觉到现有方法的不足?prototype 方法应运而生!下面,将通过实例由浅入深讲解 prototype 的具体使用方法:
1、最简单的例子,了解 prototype:
(1) Number.add(num):作用,数字相加
实现方法:Number.prototype.add = function(num){return(this+num);}
试验:alert((3).add(15)) -> 显示 18
(2) Boolean.rev(): 作用,布尔变量取反
实现方法:Boolean.prototype.rev = function(){return(!this);}
试验:alert((true).rev()) -> 显示 false
是不是很简单?这一节仅仅是告诉读者又这么一种方法,这种方法是这样运用的。
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 方法中也是可行的!
分享到:
评论

相关推荐

    JavaScript中对象的prototype属性代码实例

    我猜一般用过JavaScript的人都看见过或者用过对象的prototype属性。这是个好东西,它可以向其原型中动态添加功能(属性和方法),但该对象不能被赋予不同的原型。然而,用户定义的对象可以被赋给新的原型。详细介绍:...

    js资料prototype 属性

    要完成这一点,声明该函数,将它加入 Array.prototype,并使用它。 代码如下:function array_max( ){ var i, max = this[0]; for (i = 1; i &lt; this.length; i++) { if (max &lt; t

    JavaScript prototype属性详解

    每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型...

    JavaScript通过prototype给对象定义属性用法实例

    本文实例讲述了JavaScript通过prototype给对象定义属性的用法。分享给大家供大家参考。具体分析如下: 下面的JS代码定义了movie对象。在使用对象的过程中又通过prototype给对象添加了isComedy属性,调用的时候直接...

    JavaScript中的原型prototype属性使用详解

    prototype属性可以将属性和方法添加到任何对象(Number, Boolean, String 和Date等)。 注:原型(Prototype)是一个全局的属性,它可以使用在几乎所有的对象。 语法 object.prototype.name = value 实例: 这里有一个...

    JavaScript中通过prototype属性共享属性和方法的技巧实例

    主要介绍了JavaScript中通过prototype属性共享属性和方法的技巧实例,本文直接给出一个代码实例,需要的朋友可以参考下

    vue-27-prototype.mp4

    prototype是函数对象上面预设的对象属性 1. JS中所有的东西都是... JS中构造函数和实例(对象)之间有微妙的关系,构造函数通过定义prototype来约定其实例的规格, 再通过 new 来构造出实例, 他们的作用就是生产对象。

    JavaScript使用prototype属性实现继承操作示例

    主要介绍了JavaScript使用prototype属性实现继承操作,结合实例形式详细分析了JavaScript使用prototype属性实现继承的相关原理、实现方法与操作注意事项,需要的朋友可以参考下

    javascript中的prototype属性实例分析说明

    一说到prototype很多人可能第一个想到的是著名的prototype.js框架,当然我们今天说的不是它,而是Javascript中的prototype属性,一般都被翻译为“原型”。这是一个比较特殊的属性,Javascript中的继承一般都依赖这...

    简单理解js的prototype属性及使用

    在进入正文之前,我得先说说我认识js的...不得不说,看了网上的一些介绍prototype的文章,基本上都说prototype是对象的一个属性,于是,我也坚定的认为prototype是一个对象的属性,所以,我被了坑好久好久,由此,引

    JavaScript prototype 使用介绍

    每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型...

    Javascript中prototype属性实现给内置对象添加新的方法

    本文实例讲述了Javascript中prototype属性实现给内置对象添加新的方法。分享给大家供大家参考。具体实现方法如下: &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;head&gt; &lt;meta ...

    JavaScript使用prototype定义对象类型

    下面我们将详细介绍如何使用 prototype 定义对象类型。 一、什么是 Prototype? 在 JavaScript 中,每个对象都有一个 prototype 属性,该属性指向一个对象,该对象包含了该对象的所有方法和属性。当我们创建一个...

    js构造函数constructor和原型prototype原理与用法实例分析

    所有函数拥有prototype属性(显式原型)(仅限函数) 原型对象:拥有prototype属性的对象,在定义函数时就被创建 __proto__, prototype和constructor 下面这三个属性的定义非常重要,始终贯穿在原型中。 prototype...

    js类的静态属性和实例属性的理解

    代码如下:&lt;... &lt;head&gt; &lt;... charset=utf-8″&gt; &lt;title&gt;测试&lt;/title&gt;...– function Man(name, age) { //定义实例属性 this.name = name;... //定义原型属性 Man.prototype.phone = ‘1

Global site tag (gtag.js) - Google Analytics