最初に列挙特性を理解します
一般に、トラバーサルで〜を使用します
var a = [1,2,3]; for(var i in a){console.log(a [i]);} orvar o = {p1:1、p2:2}; for(console.log(i+'='+o [i]);} // p1 = 1; p2 = 2;<1>すべての属性がfor〜で表示されるわけではありません。たとえば、(配列)長さの属性とコンストラクター属性。表示されたこれらのプロパティは列挙可能性と呼ばれ、列挙品であるプロパティは、各オブジェクトによって提供されるPropertyIsEnumerable()メソッドによって決定できます。
<2>プロトタイプチェーンの各属性も表示されます。これらが列挙可能である場合、hasownProperty()であり、プロパティがオブジェクトのプロパティまたはプロトタイププロパティであるかどうかを判断します。
<3>すべてのプロトタイププロパティについて、propertyisEnumerable()は、〜で列挙できるものを含むfalseを返します。
JSコードの例
function dog(name、color){this.name = name; this.color = color; this.somemethod = function(){return 1;}} price.price.price.price = 100; dog.prototype.rating = 3; var newdog = new dog( "doggg"、 "Yellow"); newDog){console.log(prop+'='+newdog [prop]);} // name = doggg // color = yellow // somemethod = function(){return 1;} // reture = 100 // rating = 3newdog.hasownproperty( 'name');独自の属性のみを表示します
for(newdogのvar prop){if(newdog.hasownproperty(prop)){console.log(prop+'='+newdog [prop]);}} newdog.propertyiseNumerable( 'name');注:組み込みのプロパティとメソッドのほとんどは列挙できません。
プロトタイプチェーンからの属性も列挙できません
PropertyIsEnumerable()への呼び出しがプロトタイプチェーン上のオブジェクトからのものである場合、そのオブジェクトのプロパティは列挙可能です
newdog.constructor.prototype.propertyisenumerable( 'price'); // true
isprototypeof():各オブジェクトには、現在のオブジェクトが別のオブジェクトのプロトタイプであるかどうかを示します
JSコードの例
var monkey = {hair:true:feeds: 'bananas'、breathes: 'air'}; function human(name){this.name = name;} human.prototype = monkey; var george = new human( 'george'); monkey.isprototypeof(george); // true true上記は、編集者が紹介したJSのhasownProperty()、propertyisenumerable()、およびisprototypeof()です。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!