JavaSript之prototype属性

近期在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属性让我们能在对象上自己定义方法和属性。

时间: 2024-10-01 06:50:44

JavaSript之prototype属性的相关文章

JavaScript prototype 属性

定义和用法 prototype 属性允许您向对象添加属性和方法 注意: Prototype 是全局属性,适用于所有的Javascript对象. 语法 object.prototype.name=value 实例 适用 prototype 属性给对象添加属性: <script> function employee(name,jobtitle,born) { this.name=name; this.jobtitle=jobtitle; this.born=born; } var fred=new

JS学习之prototype属性

javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用.以A.prototype = new B();为例, 理解prototype不应把它和继承混淆,A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍,A可以使用B的方法和属性,这里强调的是克隆而不是继承,可以出现这种情况:A的prototype是B的实例,同时B的prototype也是A的实例. 1 function base

javascript Array对象prototype属性

prototype 属性使您有能力向对象添加属性和方法. 语法: object.prototype.name=value 例子: <script type="text/javascript"> function employee(name,job,born) { this.name=name; this.job=job; this.born=born; } var bill=new employee("Bill Gates","Engineer

js中的prototype属性

javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用. 这个属性非常有用:为一个特定类声明通用的变量或者函数. 你不需要显式地声明一个prototype属性,因为在每一个构造函数中都有它的存在. 例如: function cat() { } alert(cat.prototype); //输出的是"Object" 由此可以看出,prototype是一个对象,那么这个对象有什么用呢 例如有一个Peo

Spring的scope=&quot;prototype&quot;属性

Spring的scope="prototype"属性 可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理, 避免struts中Action的线程安全问题.这句话怎么理解呢如果用单例方式会有什么样的结果呢? spring 默认scope 是单例模式这样只会创建一个Action对象每次访问都是同一个Action对象,数据不安全struts2 是要求 每次次访问 都对应不同的Action scope="prototyp

Javascript中prototype属性的详解

原文链接:http://www.cnblogs.com/Uncle-Keith/p/5834289.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不是基于‘类的’,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对

为什么实例没有prototype属性?什么时候对象会有prototype属性呢?

为什么实例没有prototype属性?什么时候对象会有prototype属性呢? javascript loudou 1月12日提问 关注 9 关注 收藏 6 收藏,554 浏览 问题对人有帮助,内容完整,我也想知道答案0 问题没有实际价值,缺少关键内容,没有改进余地 function Foo() {} var foo = new Foo(); console.log(foo.prototype);// undefined console.log(foo.__proto__ === Foo.pr

JavaScript中的prototype属性

1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <script type="text/javascript"> 7 /* 8 每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象

js函数prototype属性学习(二)

继续探讨js对象的prototype属性,前面已经看到在创建完一个对戏之后,随时都会有一个_proto_属性伴随所有,那么,这个_proto_又是用来干嘛的,面试时问的高大上的原型链又是怎么回事? 拿出前面已经有的例子,如下: function Person(name){ this.name = name; this.interduceSelf= function(){ alert("my name is " + this.name); }; }; Person.prototype.i