近期在JavaSript进行Array操作的时候发现没有删除节点的方法。而我要实现的效果须要不断调用删除节点的方法。查找了相关资料发现能够利用prototype属性给Array添加删除节点的方法。而且该方法同Array自身拥有的push()、pop()、reverse()、slice()、sort()、join()等方法一样使用。

代码1

Array.prototype.remove = function (dx) {
if (isNaN(dx) || dx > this.length) { return false; }
for (var i = 0, n = 0; i < this.length; i++) {
if (this[i] != this[dx]) {
this[n++] = this[i]
}
}
this.length -= 1
}

測试该方法

代码2

 $(function () { var arr = [1, 2, 3];
arr.remove(1);
var s='';
for(var i=0;i<arr.length;i++){
s = s + arr[i]+',';
}
alert(s.substring(0,s.length-1));
});

数组是从0開始编号,因此删除的元素是“2”,输出的结果为“1,3”,正确。

w3school给的解释是:prototype使您有能力给对象加入属性和方法。

因为JavaSript没有类的概念,因此也无法向面向对象语言一样有继承。prototype正是为了解决此问题,为开发人员打开了一扇门。通过这扇门,开发人员能够在对象上定义属性和方法,然后在初始化一个变量。比如数组,那么该数组就具有了对新定义的属性和方法的一个引用(能够将其理解为是对Array对象新定义属性和方法的“继承”)。有的人会将“代码1”中的代码理解为是赋值,这是极其不准确的。假设是赋值。那么将会指向内存中同一块区域,当时当我们假设在“代码2”中再初始化一个数组的话,数组1和数组2分别调用remove()方法。将不会受到影响。

以下在Date对象实现了Format()方法。这个平时也用得比較多。

    // Date对象上实现Format方法,将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 能够用 1-2 个占位符。
// 年(y)能够用 1-4 个占位符。毫秒(S)仅仅能用 1 个占位符(是 1-3 位的数字)
// 用法:
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") -> 2014-04-16 10:12:30.526
// (new Date()).Format("yyyy-M-d h:m:s.S") -> 2014-4-16 7:6:9.25
Date.prototype.Format = function (fmt) {
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
// RegExp.$1 返回匹配的第一个字符串(以括号为标识)
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
return fmt;
}

在这个样例中有一个正則表達式的应用,RegExp.$1能够返回第一个匹配的字符串,以下用一个样例来说明问题。

$(function () {
var r = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;
r.exec('1988-01-10');
s1 = RegExp.$1;
s2 = RegExp.$2;
s3 = RegExp.$3;
alert(s1 + "," + s2 + "," + s3)
});

返回的结果:1988,01,10

本文主要是对JavaSript的prototype属性使用心得进行总结。程序开发中太多时候我们习惯了“.”这个操作符,通过该操作符来引出对象内置的属性和方法,然而有的时候并不是如我们期望的那样别人啥事都为我们准备好了。prototype属性让我们能在对象上自己定义方法和属性。

JavaSript之prototype属性的更多相关文章

  1. Javascript中prototype属性详解

    在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...

  2. 简单理解js的prototype属性

    在进入正文之前,我得先说说我认识js的prototype这个东西的曲折过程. 百度js的prototype的文章,先看看,W3School关于prototype的介绍: 你觉得这概念适合定义js的pr ...

  3. js中Prototype属性解释及常用方法

    1.prototype的定义 javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用. 每一个构造函数都有一个属 ...

  4. Javascript中prototype属性的详解

    原文链接:http://www.cnblogs.com/Uncle-Keith/p/5834289.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象 ...

  5. js的Prototype属性 解释及常用方法

    函数:原型 每一个构造函数都有一个属性叫做原型(prototype,下面都不再翻译,使用其原文).这个属性非常有用:为一个特定类声明通用的变量或者函数. prototype的定义 你不需要显式地声明一 ...

  6. JavaScript prototype 属性

    prototype 属性使开发人员有能力向对象添加属性和方法. 语法 object.prototype.name=value 实例 在本例中,我们将展示如何使用 prototype 属性来向对象添加属 ...

  7. 继承:《原型和原型链(prototype 属性使您有能力向对象添加属性和方法。)》

    二. 原型对象   在JavaScript 中,每当定义一个对象(函数)时候,对象中都会包含一些预定义的属性.其中函数对象的一个属性就是原型对象 prototype.注:普通对象没有prototype ...

  8. JavaScript---网络编程(3)-Object、String、Array对象和prototype属性

    本节学习JavaScript的对象和方法(函数)~ Object 对象 提供所有 JScript 对象通用的功能. obj = new Object([value]) 参数 obj 必选项.要赋值为 ...

  9. JS学习之prototype属性

    javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用.以A.prototype = new B();为例, 理 ...

随机推荐

  1. 小学生都能学会的python(<lamda匿名函数,sorted(),filter(),map(),递归函数>)

    小学生都能学会的python(<<lamda匿名函数,sorted(),filter(),map(),递归函数,二分法>> 1. lambda 匿名函数 lambda 参数: ...

  2. 一个HTTP连接是包含两部分的,请求报文和响应报文这俩组合起来才是一次完整的HTTP请求,并不会单独显示请求报文或者响应报文

    一个HTTP连接是包含两部分的,请求报文和响应报文这俩组合起来才是一次完整的HTTP请求,并不会单独显示请求报文或者响应报文. 2.注意看,一次HTTP请求,是包括这两部分的

  3. 阅读《Android 从入门到精通》(15)——数字时钟

    数字时钟(DigitalClock) java.lang.Object; android.view.View; android.widget.TextView; android.widget.Digi ...

  4. [CSS3] CSS Background Images

    Body with background image and gradient html { background: linear-gradient(#000, white) no-repeat; h ...

  5. 匿名訪问之(一)web application级别

    假设用SharePoint做一个对外开放的公共站点,比方公司展示站点.那么浏览站点的人不须要注冊和登陆.就应该能看到内容.这个时候就须要对站点开启匿名訪问. SharePoint的匿名訪问是从上而下的 ...

  6. HMM(隐马尔科夫模型)——本质上就是要预测出股市的隐藏状态(牛市、熊市、震荡、反弹等)和他们之间的转移概率

    摘自:http://blog.csdn.net/baskbeast/article/details/51218777 可以看 <统计学习方法>里的介绍 举一个日常生活中的例子,我们希望根据 ...

  7. 机器翻译引擎的基本原理 ——LSTM

    机器翻译引擎的基本原理  摘自:infoq 谷歌机器翻译 Zero-shot:零次 Training:训练 Google Neural Machine Translation:谷歌神经机器翻译 我们每 ...

  8. 大家都能看懂的 canvas基础教程

    原文链接: http://www.shitu91.com/cms/canvasSub/index.html 01.canvas简单的认识 canvas 是html5提供给我们的一个绘图标签 默认大小 ...

  9. VM虚拟机上的CentOS 7系统重置root用户密码

    1.开机在进入CentOS系统时(还未进入系统内)的系统选择页面时按E键进入系统编辑模式 2.找到Linux16开头的这行代码,用方向键将光标移动至这行代码的结尾,键入一个空格和rd.break,然后 ...

  10. asp.net DataTables

    无聊做一个,但是还是留下一些疑惑: 在控件中加入例如编辑,删除之类的按钮,而不是以行内元素呈现. 真实分页的实现方法. 要是有知道的朋友,希望指点一二. 下面只实现的功能: 隐藏列 冻结列 分页 列排 ...