LoginSignup
3
1

More than 3 years have passed since last update.

【JavaScript】Proxyオブジェクトについて【まとめ】

Last updated at Posted at 2020-11-18

Proxyオブジェクトとは

指定したオブジェクトのプロパティを操作する際に独自の処理を追加する為のオブジェクト。

main.js

const target = {
  hoge: 'hoge',
  fuga: 'fuga'
}

const handler = {
  メソッド
}

new Proxy(target, handler);

// target  = 指定するオブジェクトが入る
// handler = 指定したオブジェクト(target)を操作する際に
//           実行されるメソッドが格納されたオブジェクト

使用例1

プロパティの値に変更があった際に「変更がありました。」と出力する。

main.js

const target = {
  hoge: 'hoge',
  fuga: 'fuga'
}
const handler = {
  set(target, prop, value) {
    target[prop] = value;
    console.log('変更がありました。') ;
  }
}

const pxy = new Proxy(target, handler);
pxy.hoge = 'ほげ';

console.log(pxy);

スクリーンショット 2020-11-18 9.12.41.png

setメソッド
値の変更を検知する。

第一引数:targetオブジェクト
第二引数:プロパティの名前
第三引数:変更された値

main.js

const target = {
  hoge: 'hoge',
  fuga: 'fuga'
}
const handler = {
  set(target, prop, value) {
    console.log(target);
    console.log(prop);
    console.log(value);
  }
}

const pxy = new Proxy(target, handler);
pxy.hoge = 'ほげ';

スクリーンショット 2020-11-18 7.52.26.png

使用例2

プロパティの値を取得した際に「取得しました。」と出力する。

main.js

const target = {
  hoge: 'hoge',
  fuga: 'fuga'
}
const handler = {
  get(target, prop) {
    console.log('取得しました。');
    return target[prop];
  }
}

const pxy = new Proxy(target, handler);
pxy.hoge;

console.log(pxy);

スクリーンショット 2020-11-18 9.29.46.png

getメソッド 
値の取得を検知する。

使用例3

プロパティの値を削除した際に「削除しました。」と出力する。

main.js

const target = {
  hoge: 'hoge',
  fuga: 'fuga'
}
const handler = {
  deleteProperty(target, prop) {
    console.log('削除しました。') 
    delete target[prop];
  }
}

const pxy = new Proxy(target, handler);
delete pxy.hoge;

console.log(pxy);

deletePropertyメソッド
値の削除を検知する。

スクリーンショット 2020-11-18 9.42.27.png

使用例4

存在しないプロパティにアクセスしたときエラーを表示させる。

main.js

const target = {
  hoge: 'hoge',
  fuga: 'fuga'
}
const handler = {
  get(target, prop) {
    if (!target[prop]) {
      throw new Error('プロパティが存在しません。');
    }
    return target[prop];
  }
}

const pxy = new Proxy(target, handler);
console.log(pxy.hoge);
console.log(pxy.fuga);
console.log(pxy.piyo);

スクリーンショット 2020-11-18 9.49.53.png


以上、Proxyについてまとめでした。
ここまで見て頂きありがとうございました!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1