`

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属性。这是个好东西,它可以向其原型中动态添加功能(属性和方法),但该对象不能被赋予不同的原型。然而,用户定义的对象可以被赋给新的原型。详细介绍:...

    非常有用的prototype实例

    首先,了解`prototype`的基本原理:每个函数(在JavaScript中,函数也是对象)都有一个名为`prototype`的属性,这个属性是一个对象,用于定义实例化该函数的对象所能共享的属性和方法。当我们创建一个新对象时,该...

    serena prototype composer 2008实例

    在"Serena Prototype Composer 2008实例"中,我们可以学习到以下几个关键知识点: 1. **原型设计基础**:了解如何使用 Serena Prototype Composer 创建各种类型的原型,包括网页应用、桌面应用和移动应用。这通常...

    了解JavaScript中的prototype (实例)

    在JavaScript中,每个函数(包括构造函数)都有一个内置的`prototype`属性,这个属性指向一个对象,该对象包含了可以被该函数的所有实例共享的属性和方法。 当我们创建一个新对象时,它会继承其构造函数的`...

    js遍历属性 以及 js prototype 和继承

    在JavaScript中,遍历属性、理解`prototype`和掌握继承机制是编程中不可或缺的基本技能。本文将深入探讨这些概念,并通过实例来加深理解。 首先,让我们来看如何遍历JavaScript对象的属性。JavaScript提供了多种...

    prototype的使用

    在这个例子中,`Person.prototype`被用来添加了`name`属性和`sayHello`方法,这两个成员被所有`Person`实例共享。 接下来,我们要了解`__proto__`和`[[Prototype]]`。虽然`__proto__`是一个非标准的属性,但在许多...

    JavaScript prototype属性详解

    JavaScript中的`prototype`属性是面向对象编程的关键特性之一,它关联了函数(特别是构造函数)与实例之间的继承关系。每个函数都有一个`prototype`属性,这个属性是一个对象,包含了所有实例共享的方法和属性。当...

    js资料prototype 属性

    在JavaScript中,当我们创建一个函数(即构造函数)时,这个函数的`prototype`属性会指向一个对象,这个对象将会作为通过这个函数创建的所有实例的原型。例如,`Array.prototype`就是所有数组实例共享的原型对象。 ...

    prototype文件以及使用说明.rar

    当你使用`new`关键字创建一个新对象时,这个新对象的`[[Prototype]]`就会指向构造函数的`prototype`属性。 3. **构造函数、原型对象和实例** - 构造函数:如`function Person() {}`,用于创建对象的模板。 - 原型...

    JavaScript prototype属性使用说明

    每个构造函数都有一个prototype属性,它指向一个原型对象,原型对象包含所有实例共享的属性和方法。通过原型,我们可以为整个类的实例添加新方法或修改方法,这样所有实例就会共享这些改变。 例如,JavaScript内置...

    JS prototype 属性

    ### prototype属性的特性 1. **默认属性**:每个函数(除了`Function.prototype`之外)的`prototype`属性默认是一个具有`constructor`属性的对象,`constructor`属性指向该函数本身。 2. **原型链**:当试图访问一...

    经典ajax.prototype.javascript实例-加载效果显示大图

    本实例主要关注如何使用Ajax.prototype来实现一个加载效果,同时展示大图的功能,这对于提升用户体验至关重要。 首先,让我们深入理解Ajax.prototype。这是一个JavaScript库,它扩展了JavaScript的内置...

    prototypeJS脚本的讲解+实例

    通过`Object.extend()`方法可以实现对象属性的复制,`Prototype.Browser`就是一个使用此方法的例子,它检测不同浏览器的特性。另外,`Class.create()`用于创建类,`Object.clone()`则用于克隆对象。 2. **DOM操作**...

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

    标题“简单理解js的prototype属性及使用”和描述“主要介绍了简单理解js的prototype属性及使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧”提示了本文的主旨在于解析JavaScript...

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

    当利用构造函数创建实例时,这些实例内部会存在一个指针,指向构造函数的原型对象,也就是prototype属性所指的对象。通过这个指针,实例就可以访问原型对象上定义的属性和方法。这样一来,我们就不必在每个实例中都...

    prototype小例子

    每当访问一个对象的属性时,如果该对象本身没有这个属性,JavaScript就会去它的`prototype`对象中查找,如果`prototype`对象也没有,再继续查找`prototype`的`prototype`,如此递归直到找到该属性或者查找到最顶层的...

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

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

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

    当我们创建一个函数,并使用new操作符来创建一个新的实例时,这个新实例的原型就是该函数的prototype属性指向的对象。通过这种方式,可以为所有通过这个构造函数创建出来的实例共享一套属性和方法。 构造函数本身也...

    javascript中的prototype属性使用说明(函数功能扩展)

    使用prototype属性扩展函数功能,意味着所有通过这个构造函数创建的新对象都可以使用这些新添加的方法或属性,而不需要在每个对象实例中单独定义。 在JavaScript中,可以使用点符号或者方括号符号来为prototype对象...

    JavaScript中的prototype(原型)属性研究

    当我们创建一个函数实例时,实例会自动获取一个内部属性[[Prototype]],这个属性通常通过`__proto__`或者`Object.getPrototypeOf`方法访问,它引用的就是函数的prototype属性所指向的对象。 ### prototype的用途 1....

Global site tag (gtag.js) - Google Analytics