オブジェクトに慣れる


オブジェクトはJavaScriptの至る所にあります.オブジェクトのより多くの知識を得ること間違いなくあなたの旅のいくつかのポイントでお手伝いします.このポストでは、我々はほとんどの開発者が知っていないか、または有用ではないオブジェクトのいくつかのプロパティやメソッドを発見します.
あなたが既にオブジェクトを作成する構文に精通していることを願っています.
let obj = { key: "value" }
しかし、我々はこれらのキーと値のカスタマイズの多くを行うことができます知っていましたか?Object.definePropertyメソッドを使用すると、プロパティの動作を制御する権限を与えます.どのように動作するか見てみましょう.
let obj = {}

Object.defineProperty( obj, "a", {
    value: 1,
    writable: false,
    configurable: true,
    enumerable: true
} )
definePropertyは3つの引数を取ります.
  • プロパティを作成しようとしているオブジェクト.
  • プロパティの名前.
  • 設定オブジェクト.
  • 設定オブジェクトについて話しましょう.


    値はキー( a )に設定したいどんな有効な値でもありえます.

    書くことができる


    書き込み可能にfalseを設定する場合.値を編集できません.
    obj.a = "new value"   // Oops, not allowed.
    

    設定可能

    configurableをtrueに設定した場合.私たちは、同じdefinePropertyの方法で、いつでも動作を変更することができますが、falseに設定する場合は、再度変更することはできません.それは一方向操作です.

    数え切れない


    Enumerableをfalseに設定すると、for...inループのような列挙では表示されません.
    さて、オブジェクトの拡張を防ぐいくつかの組み込みメソッドを見てみましょう.

    preventextension


    その名が示すように.オブジェクトのプロパティを設定するのを防ぎます.
    let obj = { a: 1 };
    
    Object.preventExtensions( obj );
    
    obj.b = 2;   // in strict mode it will throw an error.
    
    console.log( obj.b )   // undefined
    

    シール


    この方法はpreventExtensionsと同じですが、既存のプロパティはconfigurable: falseとなります.したがって、新しいプロパティを追加することはできませんし、再構成することはできません.再び一方向操作.
    let obj = { a: 1 };
    
    Object.seal( obj );
    
    obj.b = 2;   // in strict mode it will throw an error.
    
    console.log( obj.b )   // undefined
    

    凍結


    これは不変性の最高レベルです.フリーズはオブジェクトのすべての「データアクセサー」をwritable: falseとしました.
    let obj = { a: 1 };
    
    Object.freeze( obj );
    
    obj.b = 2;   // in strict mode it will throw an error.
    
    console.log( obj.b )   // undefined
    
    これらは私が役に立つと面白い方法です.いくつかの興味深い方法を知っている場合は、以下のコメントをしてください.その時まで、私はもう一つの刺激的なポストで戻ります.