0

これを読んだ後、いくつか質問があります: hasOwnProperty vs propertyIsEnumerable

オブジェクト内のすべてのメソッドは列挙可能ではないと言えますか? そうでない場合、列挙可能なメソッドの例を挙げていただけますか? 列挙可能なメソッドを作成するには?

4

2 に答える 2

1

デフォルトでは、オブジェクトまたはそのプロトタイプ チェーンに追加するすべてのメソッドは列挙可能です。for infirebug や webkit インスペクタなどのデバッグ ツールを調べてみると、どのループにも表示されないいくつかのプロパティに気付くでしょう。

このようなプロパティは、たとえばprototype__proto__などisPrototypeOfです。

于 2012-07-28T13:50:33.537 に答える
0

これを読んだ後、いくつか質問があります: hasOwnProperty vs propertyIsEnumerable

あなたは質問を読んだだけのようです:-)

オブジェクト内のすべてのメソッドは列挙可能ではないと言えますか?

まず第一に、JavaScript には「メソッド」がありません。オブジェクトは関数であるプロパティを持つことができます。または、プロトタイプ オブジェクトから継承することもできます。

そうでない場合、列挙可能なメソッドの例を挙げていただけますか?

リンクされた質問からサンプル関数を取得し、インスタンスをループすると、継承されたものと直接のものの両方で、すべての番号付け可能なプロパティが取得されます。

> for (var prop in new f) console.log(prop)
a
b
c
d
e
g

Object.prototypeなどから継承された列挙不可能なプロパティはログに記録されませんでした。toStringisPrototypeOf

では、なぜisEnumberablefalse を返すのでしょうか。それは答えでよく説明されてい ます:関数は、プロトタイプから継承されたものではなく、独自のプロパティのみを考慮します。

列挙可能なメソッドを作成するには?

問題は、むしろ「列挙不可能なメソッドを作成する方法は?」ということです。そのタスクには を使用しますObject.defineProperty

単純な代入によって作成される他のすべてのプロパティは、既定で列挙可能です。これは、通常のプロパティと、そのプロトタイプから継承されたプロパティの両方に適用されます。

于 2012-07-28T15:09:56.207 に答える