JavaScript オブジェクト指向の属性関数の使用法

大家讲道理
リリース: 2017-08-19 10:06:34
オリジナル
1506 人が閲覧しました

defineProperty は、オブジェクトの属性値と記述子を設定するために使用されます。 [[Configurable]]、[[Enumerable]]、[[Writable]]、[[Value]] の 4 つの記述子があります。記述子は [[Writable]] に設定されていますが、これは何を意味しますか?

1         "use strict";2         var person = {};3         Object.defineProperty( person, "name", {4             writable : false,5             value : 'ghostwu'6         } );7         console.log( person.name ); //ghostwu8         person.name = "this is ghostwu";9         console.log( person.name );//ghostwu
ログイン後にコピー

defineProperty为person对象,添加一个name属性,两个属性描述符:
ログイン後にコピー

    writeble属性: false: 書き込み不可true: 書き込み可能
  • value属性: 'ghostwu'
  • <span style="font-size: 16px">也就是说,name这个属性的值为ghostwu, 但是不能修改这个值。writable为false的时候,</span><br><span style="font-size: 16px">如果对这个属性name进行重新赋值(修改)在非严格模式下,赋值会被忽略,在严格模式下会报错.</span><br><br><span style="font-size: 16px"><strong>当一个属性的描述符设置了[[Configurable]]?</strong></span>
    ログイン後にコピー
     "use strict"; 2         var person = {}; 3         Object.defineProperty( person, "name", { 4             configurable : false, 5             value : 'ghostwu' 6         } ); 7         console.log( person.name ); //ghostwu 8         delete person.name; 9         console.log( person.name );//ghostwu10 11         Object.defineProperty( person, "name", {12             configurable : true,  //报错13             value : 'ghostwu'14         } );
ログイン後にコピー

defineProperty は人物オブジェクトです、name 属性を追加します。

configurable 属性: false: 設定不可 true: 設定可能
  • value 属性: 'ghostwu'
  • つまり、name 属性の値は ghostwu ですが、設定できませんこの値は、
  • configurable が false の場合、name 属性を削除すると、非厳密モードでは削除操作が無視され、厳密モードではエラーが報告されます

そして、これをconfigurable を false に設定した属性を再度 true に変更すると、上記の例の 12 行目に示すように、エラーが報告されます

属性の記述子が [[E

numerable

]] に設定されている場合?

     "use strict"; 2         var person = {}; 3         Object.defineProperty(person, "name", { 4             enumerable: true, 5             value: 'ghostwu' 6         }); 7         Object.defineProperty(person, "sex", { 8             enumerable: false, 9             value: 'man'10         });11         Object.defineProperty(person, "age", {12             enumerable: true,13             value: 2214         });15 16         /*17             name--->ghostwu18             age--->2219         */20         for( var i in person ){21             console.log( i + '--->' + person[i] );22         }
ログイン後にコピー

defineProperty は、名前、年齢、性別の 3 つの属性を追加する人物オブジェクトです。 false: 列挙不可能 true: 列挙可能

つまり、列挙可能な場合はプロパティです。値が false の場合、この属性は for...in (ループ/列挙) によって通過できません

上の例のように、性別は非列挙可能に設定されているため、for..in はそれを列挙しません



Object 。 getOwnPropertyDescriptor() メソッド: このメソッドは 2 つのパラメーターをサポートします。 パラメーター 1: プロパティが配置されているオブジェクト。戻り値はオブジェクトです

     var person = {2             name : 'ghostwu',3             age : 22,4         };5         var descriptor = Object.getOwnPropertyDescriptor( person, "name" );6         console.log( descriptor.configurable ); //true7         console.log( descriptor.enumerable ); //true8         console.log( descriptor.writable ); //true9         console.log( descriptor.value ); //ghostwu
ログイン後にコピー

Object.definePropertyを使用して定義されていないオブジェクトの場合、その記述子: configurable、enumerable、writable、デフォルト値はtrueです。

       var person2 = { 2         } 3         Object.defineProperty( person2, "name", { 4             value : 'ghostwu' 5         }); 6  7         var descriptor2 = Object.getOwnPropertyDescriptor( person2, "name" ); 8         console.log( descriptor2.configurable ); //false 9         console.log( descriptor2.enumerable ); //false10         console.log( descriptor2.writable ); //false11         console.log( descriptor2.value ); //ghostwu
ログイン後にコピー

以上がJavaScript オブジェクト指向の属性関数の使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート