65

私は現在、このjqueryマスキングプラグインを読んで、それがどのように機能するかを理解しようとしています.多くの場所で、作成者はslice()引数を渡さない関数を呼び出しています. たとえば、ここでは_buffer変数がslice()d で、 と_buffer.slice()_buffer同じ値を保持しているように見えます。

これを行う理由はありますか、それとも作成者がコードを必要以上に複雑にしているのですか?

 //functionality fn
 function unmaskedvalue($input, skipDatepickerCheck) {
     var input = $input[0];
     if (tests && (skipDatepickerCheck === true || !$input.hasClass('hasDatepicker'))) {
         var buffer = _buffer.slice();
         checkVal(input, buffer);
         return $.map(buffer, function(element, index) {
             return isMask(index) && element != getBufferElement(_buffer.slice(), index) ? element : null; }).join('');
    }
    else {
        return input._valueGet();
    }
}
4

1 に答える 1

104

この.slice()メソッドは、配列の (浅い) コピーを作成し、ソース配列のどのサブセットをコピーするかを示すパラメーターを取ります。引数なしで呼び出すと、配列全体がコピーされます。あれは:

_buffer.slice();
// is equivalent to
_buffer.slice(0);
// also equivalent to
_buffer.slice(0, _buffer.length);

編集:開始インデックスは必須ではありませんか? はい。いいえ。並べ替え。JavaScript リファレンス ( MDN.slice()など) では、通常、少なくとも 1 つの引数 (開始インデックス) が必要であると言われています。.slice()引数なしで呼び出すことは、 と言うようなもの.slice(undefined)です。ECMAScript 言語仕様では、アルゴリズムのステップ 5 に.slice()「Let relativeStartbe ToInteger(start)」と記載されています。ToInteger()を使用する抽象操作のアルゴリズムを見ると、最終的に に変換さToNumber()れることがわかります。undefined0

それでも、私自身のコードでは、そう.slice(0)ではないと常に言い.slice()ます。

于 2012-07-02T01:31:48.040 に答える