1
Object.prototype.looper = function() {
  var result = [];
  for (var property in this)
    result.push(property);
  return result;
};

var test = {name: "tab", age: 5};
console.log(test.looper());

キーだけを取得するためにルーパーを削除する方法

["name", "age", "looper", looper: function]

必要な出力

 ["name", "age"]
4

3 に答える 3

3

Object.keysメソッドを使用できます。これは列挙可能なキーのみを提供するため、ルーパー キーは取得されません。

// Enumerable keys as an array
Object.keys( objectName );

Object.keys メソッドは最新のブラウザーに含まれており、リンクされた記事に記載されているように、存在しない場合は古いブラウザーに追加できます。

于 2013-07-22T09:20:23.173 に答える
2

解決策は 2 つあります。関数がObject.keys行うのと同じことを行う which を使用できます。looper

var test = {name: "tab", age: 5};
console.log(Object.keys(test));

hasOwnProperty2 番目の方法は、次のチェックを追加することlooperです。

Object.prototype.looper = function() {
  var result = [];
  for (var property in this)
    if (this.hasOwnProperty(property))
      result.push(property);
  return result;
};

var test = {name: "tab", age: 5};
console.log(test.looper());

それはとても簡単です。デモを見る:

  1. http://jsfiddle.net/aaditmshah/bhZbk/
  2. http://jsfiddle.net/aaditmshah/bhZbk/1/
于 2013-07-22T09:19:56.540 に答える
1

hasOwnPropertyはトリックを行います:

for (var property in this) {
    if (this.hasOwnProperty(property)) {
        result.push(property);
    }
}

for..inプロトタイプ チェーン内のすべてのプロパティを反復処理するためhasOwnProperty()、オブジェクトのプロパティを反復処理するとき、特に一部のライブラリを使用するときは常に check を使用することをお勧めします。これも理由の 1 つであり、for..in配列の反復処理に適していません。

于 2013-07-22T09:18:49.650 に答える