`
沙漠绿树
  • 浏览: 429625 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JS中prototype介绍与使用

阅读更多
引用
        js本身是一种面向对象的语言,它所涉及的元素根据其属性的不同都依附于某一个特定的类。我们所常见的类包括:数组变量(Array)、逻辑变量 (Boolean)、日期变量(Date)、结构变量(Function)、数值变量(Number)、对象变量(Object)、字符串变量 (String) 等,而相关的类的方法,也是程序员经常用到的(在这里要区分一下类的注意和属性和方法),例如数组的push方法、日期的get系列方法、字符串的 split方法等等。但是在实际的编程过程中不知道有没有感觉到现有方法的不足?因此prototype 方法应运而生。

        我们知道js中对象的prototype属性,是用来返回对象类型原型的引用的。我们使用prototype属性提供对象的类的一组基本功能。并且对象的新实例会"继承"赋予该对象原型的操作。所有 js 内部对象都有只读的 prototype 属性。可以向其原型中动态添加功能(属性和方法),但该对象不能被赋予不同的原型。然而,用户定义的对象可以被赋给新的原型。所有对象都有prototype,prototype自身也是对象,它有prototype,这样就形成了prototype链。当遇到有链中为null 时,链就终止了,object的prototype就是null。

下面,将通过实例由浅入深讲解 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.js

    6. **Class与Object继承**:Prototype.js 引入了面向对象的概念,实现了类(Class)和对象继承,使得JavaScript具备了更接近传统面向对象语言的编程模式。 7. **JSON支持**:随着JSON成为数据交换的主流格式,...

    prototype介绍和使用方法

    《prototype介绍和使用方法》 在JavaScript开发中,Prototype是一个重要的库,由Sam Stephenson创建,主要用于提升Web应用程序的交互性和用户体验,特别是在实现Web 2.0特性时。Prototype库的核心理念是通过提供一...

    JS中的prototype

    JavaScript中的`prototype`是语言核心概念之一,它在对象创建、继承和方法共享中起着关键作用。在JavaScript中,每个对象都有一个`prototype`属性,这个属性引用了一个对象,通常用于实现对象间的继承。理解`...

    prototype.js文件使用和讲解

    以上就是关于`prototype.js`文件的基本介绍和使用方法。通过这个库,你可以更高效地进行JavaScript编程,实现丰富的Web交互功能。记得结合`prototype.js`开发手册,深入学习并熟练掌握其各种用法,提升你的...

    prototype 1.6中文手册 chm+prototype 1.6.js源码 最新版

    在基础概念中,读者可以了解到Prototype如何扩展JavaScript的基本类型,如Array、String和Function,以及如何使用$$选择器来快速选取DOM元素。对象操作部分则讲解了Prototype如何支持面向对象的编程,如Class构造...

    prototype.js中文手册

    它在Web开发中扮演着重要的角色,尤其在AJAX(异步JavaScript和XML)应用中,Prototype.js 提供了丰富的功能和工具,使得开发者能更高效地编写JavaScript代码。 ### 一、Prototype.js核心特性 1. **DOM操作**:...

    开源JS包Prototype使用指南

    Prototype是一个由Sam Stephenson编写的JavaScript库,它提供了一套简洁、高效且易于使用的API来简化Web应用开发过程中的许多常见任务。该库专注于简化DOM操作、事件处理、AJAX调用等Web 2.0应用的核心功能。由于其...

    JavaScript中prototype的使用

    2. **prototype与继承** 上述提到的“类型”和“原型”的关系是JavaScript继承的基础。通过设置一个对象的`prototype`为另一个对象,我们可以让这个对象继承另一个对象的属性和方法。例如,如果我们有一个`Point`...

    prototype_1.7.3.js 最新版本

    《prototype_1.7.3.js:JavaScript框架的里程碑》 在JavaScript的世界里,Prototype库是一个不可或缺的重要组成部分,尤其在Web开发领域,它为开发者提供了强大的功能和便利性。Prototype_1.7.3.js是这个库的一个...

    prototype-1.6.0.3.js+prototype1.4 、1.5中文手册+prototype1.6英文手册

    Prototype是JavaScript库,它为浏览器...而源代码文件`prototype-1.6.0.3.js`则让你可以直接在项目中应用或研究Prototype的实现。对于前端开发者而言,掌握Prototype能提升开发效率,同时增强网页的交互性和动态性。

    prototype.js javaScript插件

    - **JSON支持**:Prototype.js提供了`toJSON`方法,可以将JavaScript对象转换为JSON字符串,便于与服务器进行数据交换。 ### 3. Prototype.js的事件处理 - **事件委托**:Prototype.js支持事件委托,允许在一个...

    关于JS中prototype的理解.docx

    在本文中,我们将详细介绍 JavaScript 中 prototype 的概念和应用场景,包括 prototype 的定义、prototype 的应用场景、prototype 的优缺点等内容。希望通过本文的学习,读者能够更好地理解 JavaScript 中 prototype...

    JS:prototype用法

    ### JS:prototype用法详解 #### 一、概念解析与基本使用 `prototype`是JavaScript中一个非常重要的概念,尤其自IE4及其后续版本引入以来,成为开发人员扩展内置对象功能的强大工具。`prototype`主要服务于面向...

    prototype.js 1.6中文手册、prototype.js 1.6英文手册、

    Prototype.js 1.6中的AJAX(异步JavaScript和XML)功能大大简化了与服务器的通信。`Ajax.Request`和`Ajax.Updater`是核心组件,前者用于发送请求,后者用于更新页面的一部分。它们都支持多种HTTP方法(GET、POST等...

    javascript中类和继承(代码示例+prototype.js)

    本文将深入探讨JavaScript中的类和继承,并结合`prototype.js`文件中的示例进行解析。 ### 类的概念与模拟 在JavaScript中,我们通常使用函数来模拟类的行为。一个函数可以看作是一个类的定义,通过`new`关键字来...

    prototype开发者手册(中文版)+prototype.js

    《Prototype开发者手册(中文版)》是一本专为JavaScript开发者准备的重要参考资料,它详细介绍了Prototype JavaScript框架的使用方法和核心概念。Prototype是一个广泛使用的开源JavaScript库,它的目标是简化...

    prototype.js简介

    **标题:** prototype.js简介 **描述:** prototype.js 是一个JavaScript库,...然而,随着ES6及后续版本的推出,许多prototype.js的功能已被原生JavaScript支持,因此在现代开发中,使用这些新的语言特性可能更为合适。

    js中prototype用法详细介绍.docx

    通过本文的介绍,我们深入了解了JavaScript中`prototype`的基本概念以及具体的使用场景。掌握了这些技巧后,开发者可以更加高效地编写出结构清晰、易于维护的代码。当然,在实际应用中还需要根据具体情况灵活运用,...

    prototype.js 1.6

    Prototype.js 是一个广泛使用的 JavaScript 库,它为浏览器环境提供了许多实用的功能,尤其是在对象操作和事件处理方面。1.6 版本是该库的一个重要里程碑,引入了许多改进和优化,使得开发人员能够更加高效地编写 ...

    JavaScript_Prototype(源代码+中文手册).rar

    JavaScript Prototype 是一种重要的编程概念,尤其在Web开发中不可或缺。这个压缩包文件“JavaScript_Prototype(源代码+中文手册).rar”包含了关于JavaScript原型的源代码和中文手册,为学习和理解这一主题提供了...

Global site tag (gtag.js) - Google Analytics