これを読んだ後、いくつか質問があります: hasOwnProperty vs propertyIsEnumerable
オブジェクト内のすべてのメソッドは列挙可能ではないと言えますか? そうでない場合、列挙可能なメソッドの例を挙げていただけますか? 列挙可能なメソッドを作成するには?
これを読んだ後、いくつか質問があります: hasOwnProperty vs propertyIsEnumerable
オブジェクト内のすべてのメソッドは列挙可能ではないと言えますか? そうでない場合、列挙可能なメソッドの例を挙げていただけますか? 列挙可能なメソッドを作成するには?
デフォルトでは、オブジェクトまたはそのプロトタイプ チェーンに追加するすべてのメソッドは列挙可能です。for in
firebug や webkit インスペクタなどのデバッグ ツールを調べてみると、どのループにも表示されないいくつかのプロパティに気付くでしょう。
このようなプロパティは、たとえばprototype
、__proto__
などisPrototypeOf
です。
これを読んだ後、いくつか質問があります: hasOwnProperty vs propertyIsEnumerable
あなたは質問を読んだだけのようです:-)
オブジェクト内のすべてのメソッドは列挙可能ではないと言えますか?
まず第一に、JavaScript には「メソッド」がありません。オブジェクトは関数であるプロパティを持つことができます。または、プロトタイプ オブジェクトから継承することもできます。
そうでない場合、列挙可能なメソッドの例を挙げていただけますか?
リンクされた質問からサンプル関数を取得し、インスタンスをループすると、継承されたものと直接のものの両方で、すべての番号付け可能なプロパティが取得されます。
> for (var prop in new f) console.log(prop)
a
b
c
d
e
g
やObject.prototype
などから継承された列挙不可能なプロパティはログに記録されませんでした。toString
isPrototypeOf
では、なぜisEnumberable
false を返すのでしょうか。それは答えでよく説明されてい ます:関数は、プロトタイプから継承されたものではなく、独自のプロパティのみを考慮します。
列挙可能なメソッドを作成するには?
問題は、むしろ「列挙不可能なメソッドを作成する方法は?」ということです。そのタスクには を使用しますObject.defineProperty
。
単純な代入によって作成される他のすべてのプロパティは、既定で列挙可能です。これは、通常のプロパティと、そのプロトタイプから継承されたプロパティの両方に適用されます。