..inに対して「トリガーしない」新しいArrayメソッドを追加するにはどうすればよいですか?

AlexD

array.prototypeに追加した関数と一緒にfor..inループを使用すると、for..inはそれらすべての関数もループします。

JavaScriptのfor / inステートメントは、オブジェクトのプロパティをループします

しかし、for..inでトリガーされずに配列プロトタイプに追加するにはどうすればよいですか?

コード例:

Array.prototype.sum = function (prop) {
    // Do something
}

for (item in myArray) {
    // Would actually loop myArray.length times + 1 for the 'sum'
}

for..inループを使用するライブラリを使用していますが、変更できません。

TJクラウダー

しかし、for..inでトリガーされずに配列プロトタイプに追加するにはどうすればよいですか?

介して、列挙不可能なプロパティとして追加Object.definePropertyます。列挙不可能がデフォルトであるため、次のようになります。

Object.defineProperty(Array.prototype, "sum", {
    value: function() {
        // ...implementation of sum
    }
});

...しかし、明示的にしたい場合は、次のようにしますenumerable: false

Object.defineProperty(Array.prototype, "sum", {
    enumerable: false, // <== Not necessary, false is the default
    value: function() {
        // ...implementation of sum
    }
});

実例:

Object.defineProperty(Array.prototype, "sum", {
  value: function() {
    return this.reduce(function(acc, value) {
      return acc + value;
    }, 0);
  }
});

var a = [1, 2, 3];
snippet.log("a.sum() = " + a.sum());
var key;
for (key in a) {
  snippet.log("key = " + key);
}
snippet.log("Note that 'sum' did not show up as a key");
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

最新のブラウザはすべてObject.defineProperty、2009年にリリースされた第5版の仕様の一部であるをサポートしています。IE8は仕様よりも前のものであるためサポートしていません


補足:for-in非エントリプロパティをArray.prototype(または配列自体に)追加するかどうかに関係なく、を使用して配列をループすることはお勧めしません。この回答では、さまざまな選択肢をお勧めしますしかし、あなたはそれを実行し、必要なhasOwnPropertyチェックがなく(それは不十分に書かれたライブラリになります)、それを変更できないライブラリを使用していると言ったので、...上記はあなたがに追加する方法ですArray.prototypeに追加が表示されることはありませんfor-in

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

同じEJB @ Timeoutメソッドに対して複数のトリガーを作成するにはどうすればよいですか?

分類Dev

Eclipseが新しいメソッドコメントにjavadocタグを追加しないようにするにはどうすればよいですか?

分類Dev

Iteratorに新しいメソッドを追加するにはどうすればよいですか?

分類Dev

DataFrame型に新しいメソッドを追加するにはどうすればよいですか?

分類Dev

FormattedStringに新しいメソッドを追加するにはどうすればよいですか?

分類Dev

Pharoに新しいメソッドを追加するにはどうすればよいですか?

分類Dev

どのEL式が特定のBeanメソッドをトリガーしているのかを知るにはどうすればよいですか?

分類Dev

トレイトを使用してScalaのクラスに新しいメソッドを追加するにはどうすればよいですか?

分類Dev

動的な数の注釈付きパラメーターをBytebuddyの新しいメソッドに追加するにはどうすればよいですか?

分類Dev

Gradleに新しいソースセットを追加するにはどうすればよいですか?

分類Dev

APIを介してMarketoのリストに対してリード(メール、名前)を追加するにはどうすればよいですか?

分類Dev

Updateメソッドのifステートメントを使用して、XNA C#で既に実行されているゲームのウィンドウに新しいイメージを追加するにはどうすればよいですか?

分類Dev

Pythonで正式なJavaメソッド引数を抽出して文字列のリストに追加するにはどうすればよいですか?

分類Dev

異なるエンティティに対して単一の追加メソッドを作成するにはどうすればよいですか?

分類Dev

メソッドを使用して、配列に追加する新しい要素がまだ追加されていないかどうかを確認するにはどうすればよいですか?

分類Dev

新しいLinkedListを生成するメソッドを作成するにはどうすればよいですか?

分類Dev

Python Etsy HTTP APIメソッドを使用して新しいアイテムを追加するにはどうすればよいですか?

分類Dev

PHP:基本クラスを編集できない場合に新しいメソッドをエレガントに追加するにはどうすればよいですか?

分類Dev

Moqを使用してデータベースと対話するメソッドをテストするにはどうすればよいですか?

分類Dev

tkinterのgrid()メソッドを使用して新しいウィジェットにボタンを作成するにはどうすればよいですか?

分類Dev

Javaストリームが同じメソッドを2回実行しないようにするにはどうすればよいですか?

分類Dev

特定のブラウザに対してのみ関数/スクリプト/メソッドを設定するにはどうすればよいですか?

分類Dev

Mavenを使用して既存のXMLドキュメントに新しいノードを追加するにはどうすればよいですか?

分類Dev

変数を介して文字列に対してさまざまなメソッドを実行するにはどうすればよいですか?

分類Dev

ボットがボットコマンドをトリガーしないようにするにはどうすればよいですか?

分類Dev

新しい緯度、経度 - onchange トリガーに基づいて Google マップの表示を更新するにはどうすればよいですか?

分類Dev

JavaのtoString()メソッドで新しい行を出力するにはどうすればよいですか?

分類Dev

Reactで新しい要素(新しいノード)を追加するにはどうすればよいですか?

分類Dev

APIを使用してZOHOINVOICEに新しい顧客を追加するにはどうすればよいですか?次のPOSTメソッドを使用して、新しい顧客を作成します。しかし、機能しません。

Related 関連記事

  1. 1

    同じEJB @ Timeoutメソッドに対して複数のトリガーを作成するにはどうすればよいですか?

  2. 2

    Eclipseが新しいメソッドコメントにjavadocタグを追加しないようにするにはどうすればよいですか?

  3. 3

    Iteratorに新しいメソッドを追加するにはどうすればよいですか?

  4. 4

    DataFrame型に新しいメソッドを追加するにはどうすればよいですか?

  5. 5

    FormattedStringに新しいメソッドを追加するにはどうすればよいですか?

  6. 6

    Pharoに新しいメソッドを追加するにはどうすればよいですか?

  7. 7

    どのEL式が特定のBeanメソッドをトリガーしているのかを知るにはどうすればよいですか?

  8. 8

    トレイトを使用してScalaのクラスに新しいメソッドを追加するにはどうすればよいですか?

  9. 9

    動的な数の注釈付きパラメーターをBytebuddyの新しいメソッドに追加するにはどうすればよいですか?

  10. 10

    Gradleに新しいソースセットを追加するにはどうすればよいですか?

  11. 11

    APIを介してMarketoのリストに対してリード(メール、名前)を追加するにはどうすればよいですか?

  12. 12

    Updateメソッドのifステートメントを使用して、XNA C#で既に実行されているゲームのウィンドウに新しいイメージを追加するにはどうすればよいですか?

  13. 13

    Pythonで正式なJavaメソッド引数を抽出して文字列のリストに追加するにはどうすればよいですか?

  14. 14

    異なるエンティティに対して単一の追加メソッドを作成するにはどうすればよいですか?

  15. 15

    メソッドを使用して、配列に追加する新しい要素がまだ追加されていないかどうかを確認するにはどうすればよいですか?

  16. 16

    新しいLinkedListを生成するメソッドを作成するにはどうすればよいですか?

  17. 17

    Python Etsy HTTP APIメソッドを使用して新しいアイテムを追加するにはどうすればよいですか?

  18. 18

    PHP:基本クラスを編集できない場合に新しいメソッドをエレガントに追加するにはどうすればよいですか?

  19. 19

    Moqを使用してデータベースと対話するメソッドをテストするにはどうすればよいですか?

  20. 20

    tkinterのgrid()メソッドを使用して新しいウィジェットにボタンを作成するにはどうすればよいですか?

  21. 21

    Javaストリームが同じメソッドを2回実行しないようにするにはどうすればよいですか?

  22. 22

    特定のブラウザに対してのみ関数/スクリプト/メソッドを設定するにはどうすればよいですか?

  23. 23

    Mavenを使用して既存のXMLドキュメントに新しいノードを追加するにはどうすればよいですか?

  24. 24

    変数を介して文字列に対してさまざまなメソッドを実行するにはどうすればよいですか?

  25. 25

    ボットがボットコマンドをトリガーしないようにするにはどうすればよいですか?

  26. 26

    新しい緯度、経度 - onchange トリガーに基づいて Google マップの表示を更新するにはどうすればよいですか?

  27. 27

    JavaのtoString()メソッドで新しい行を出力するにはどうすればよいですか?

  28. 28

    Reactで新しい要素(新しいノード)を追加するにはどうすればよいですか?

  29. 29

    APIを使用してZOHOINVOICEに新しい顧客を追加するにはどうすればよいですか?次のPOSTメソッドを使用して、新しい顧客を作成します。しかし、機能しません。

ホットタグ

アーカイブ