JavaSriptのprototype属性


最近JavaSriptでAray操作をしていますが、ノードを削除する方法がないことが分かりました.実現する効果は常に削除ノードを呼び出す方法が必要です.関連資料を調べたら、prototype属性を利用してArayに削除ノードを追加する方法があります.そしてこの方法はAray自身が持つpsh()、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です.
w 3 schoolは、オブジェクトに属性と方法を追加する能力を持つと説明しています.JavaSriptには類の概念がないので、対象言語と同じように継承することもできません.プロトタイプはこの問題を理解するために開発者のための扉を開いています.このドアを通じて開発者はオブジェクトに属性と方法を定義し、行列などの変数を初期化することができます.この配列は新しい定義の属性と方法に対する参照を持っています.ある人はコード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のプロパティは、オブジェクトに方法と属性をカスタマイズすることができます.