JavaScript

JavaScriptをついばむ:オブジェクト

JavaScriptの勉強メモ。

オブジェクトの生成

  • オブジェクトリテラル、コンストラクタ、Object.createによる3種類位の生成方法があるがAirbnbのスタイルガイドを読むとリテラル構文を使うほうが良いらしい。
// bad
const card = new Object();

// good
const card = {};

オブジェクトのロック

  • 拡張防止:Object.preventExtensionsメソッド
    • 引数に指定されたオブジェクトを拡張不能にする。
  • 保護:Object.sealメソッド
    • 引数に指定されたオブジェクトを保護する。保護するとプロパティの追加、削除、属性変更ができなくなる。
  • 凍結:Object.freezeメソッド
    • 引数に指定されたオブジェクトを凍結する。オブジェクトのプロパティを読み込む以外なにもできなくなる。(プロパティの追加禁止、再定義不可能、値の書き込み禁止にするため)

Mixin

オブジェクトに他のオブジェクトの持っているプロパティをコピーして「混ぜ込む」こと。

function mixin(target, source) {
   for(var propety in source) {
     if(source.hasOwnProperty(propety)) {
       target[propety] = source[propety];
     }
   }
   return target;
}

let item1 = {a: 1, b: 2};
let item2 = {b: 3, c: 4};
let item = mixin(item1, item2);
console.log(item);

// [object Object] {
//   a: 1,
//   b: 3,
//   c: 4
// }

ES6でのオブジェクト拡張

  • プロパティ内でのシンボル利用
let item = {};
let s = Symbol("clover");
item[s] =3;
console.log(item); // => Object {Symbol(clover): 3}
  • オブジェクトリテラルの拡張
    • 算出プロパティ名:[計算式]: value
    • プロパティ定義の略記:{prop}
    • メソッド定義の略記:{method() {} }
    • ジェネレータ定義の略記:{ * generator() {} }