欠落しているコードがあるようです。
var M = [];
グローバル変数のように見える変数に新しい配列を割り当てMます(ただし、そうではない可能性があります。コンテキストを適切に判別するための十分なコードが表示されていないだけです)。
haveComponents: function () {
これは、。というプロパティに関数を割り当てるオブジェクトリテラルの一部のようhaveComponentsです。
var a = 0;
ローカル変数aを作成し、コードの実行時に値を割り当てます0。
for (var n in this.M) a++;
ローカル変数nを作成し、参照するものの列挙可能なプロパティの名前を順番に割り当てthis.Mます。thisがグローバルオブジェクトの場合、上記Mで初期化された配列になります。そうでない場合、それは何か他のものであるかもしれないし、そうでないかもしれません。他の割り当て、または設定されているものは表示されていませんthis。
の列挙可能なプロパティM(継承されたプロパティを含む)ごとaに、1ずつインクリメントされます。
return a > 0;
}
がゼロより大きいtrue場合に戻ります。a
同等の関数は次のとおりです。
haveComponents: function () {
for (var n in this.M) {
// this.M has at least one enumerable property
return true;
}
// this.M has no enumerable properties
return false;
}
または純粋主義者のために:
haveComponents: function () {
var hasEnumerable = false;
for (var n in this.M) {
hasEnumerable = true;
break;
}
return hasEnumerable;
}