2017-02-01 15 views
0

私は自分のコードにテレメトリ関数を書いています。私はここでMDNリンクに記載されているPerformance.getEntriesByType()関数を使用しています - https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByType。 リンクごとに、メソッドがPerformanceEntryオブジェクト/空リストのリストを返すことが記述されています。Javascript - TypeError:オブジェクト[オブジェクトオブジェクト]にはメソッド 'forEach'がありません

  1. 理由:私はwindow.performance.getEntriesByType(タイプ)メソッドの戻り値に「forEachの」メソッドを呼び出すとき はしかし、私は次のようなエラーに疑問の

    TypeError: Object [object Object] has no method 'forEach' 
    

    カップルを取得します'forEach'にはメソッドがないというエラーが表示されますか?

  2. エラーメッセージのObject [object Object]は何を意味しますか?
+1

実際のコードを含めるように質問を編集してください。どのブラウザを使用していますか? –

答えて

2

これは、forEach()メソッドを持たないオブジェクトに対してforEach()メソッドを呼び出そうとしていることを意味します。 forEach()Array.prototype(すべての配列にこのメソッドがあることを意味します)に実装されており、一部のブラウザでDOM nodeListオブジェクトに実装されています。しかし、別の種類のオブジェクトやそれをサポートしていないブラウザで使用しようとしています。

performance.getEntriesByType()forEach()が実装される場合であるArrayと同じもの、されていない、listを返します。

The page you referencedは、window.performance.getEntriesByType()コールから結果リストをループする方法を示しています。

// Use getEntries() to iterate through the each entry 
    var p = performance.getEntries(); 
    for (var i=0; i < p.length; i++) { 
    log("Entry[" + i + "]"); 
    check_PerformanceEntry(p[i]); 
    } 
+0

なぜオブジェクト[オブジェクトオブジェクト]としてエラーが表示されるのですか?なぜ3つのオブジェクト識別子? – Saint

+1

@Saintオブジェクトの文字列へのデフォルトの変換は「[object Object]」です。実際には、エラーがあるオブジェクトのタイプ(「Object」)とその文字列表現が表示されていますそれは基本的な型( "[object Object]")でもあります。 –

+0

ありがとう@Scott、私の疑問をクリアします。 – Saint

0

私は個人的にはAndroidデバイス上のバグに走ったと私はそれを変更することができませんでしたので、問題は、依存のコードにありました。問題を解決するためにthis polyfillを使用しました。

if (window.NodeList && !NodeList.prototype.forEach) { 
    NodeList.prototype.forEach = function (callback, thisArg) { 
     thisArg = thisArg || window; 
     for (var i = 0; i < this.length; i++) { 
      callback.call(thisArg, this[i], i, this); 
     } 
    }; 
} 
関連する問題