2

Array プロトタイプに新しいメソッドが追加されたプロジェクトに取り組んでいます。

Array.prototype.addOrRemove = function(value) {
    var index = _.indexOf(this, value);

    if (index === -1) {
        this.push(value);
    } else {
        this.splice(index, 1);
    }
    return this;
};

新しい値を追加するか (配列に存在しない場合)、それを削除します (存在しない場合)。奇妙なことに、次のように入力すると次のようになります。

console.log([]);

次の出力が得られます (chrome JS コンソールで):

[addOrRemove: function]

そのようなコンソールログには値のみが存在するはずだと思いました。私は何か間違ったことをしましたか、それとも正常な動作ですか (とにかく奇妙に思えます)? 説明をいただければ幸いです。

4

1 に答える 1

5

を使用できますdefineProperty。これにより、デフォルトでプロパティが列挙不可能になります。

Object.defineProperty(
    Array.prototype,
    'addOrRemove',
    {
        get: function() {
            return function(value) {
                var index = _.indexOf(this, value);

                if (index === -1) {
                    this.push(value);
                } else {
                    this.splice(index, 1);
                }
                return this;
            };
        }
    }
);

console.log([]);

http://jsfiddle.net/qHFhw/1/

于 2013-06-21T09:58:48.647 に答える