Water Sunlight

軽量プログラミングの文法 - JavaScript/Python

ユーザ用ツール

サイト用ツール


js:build-in:proxy

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

次のリビジョン
前のリビジョン
js:build-in:proxy [2021/07/19 13:45]
tanaka 作成
js:build-in:proxy [2021/07/21 12:40] (現在)
tanaka
行 7: 行 7:
 ===== Proxyオブジェクト ===== ===== Proxyオブジェクト =====
  
-https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy|Proxy]]を利用することで、既存のオブジェクトに手を加えずに変更することができます。+[[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy|Proxy]]を利用することで、既存のオブジェクトに手を加えずに変更することができます。
  
  
行 20: 行 20:
  
 <sxh javascript;title:Example> <sxh javascript;title:Example>
 +class Student {
  
-TODO+    constructor(name, age) { 
 +        this.name = name; 
 +        this.age = age; 
 +    } 
 +    greeting() { 
 +        console.log(`I am ${this.name}. I am ${this.age} years old.`); 
 +    } 
 +}
  
 +function createProxyStudent(name, age) {
 +    return new Proxy(new Student(name, age), {
 +        get(target, prop) {
 +            // メンバーが見つからない場合はそのままメンバー名を返す
 +            return prop in target ? target[prop] : prop;
 +        },
 +
 +        set(target, prop, val) {
 +            if(prop=="age" && !Number.isInteger(val)) {
 +                return false;
 +            }
 +            target[prop] = val;
 +        }
 +    });
 +}
 +
 +// オリジナルの鈴木さん
 +let suzuki = new Student('Suzuki', 15);
 +suzuki.greeting();
 +
 +suzuki.age = "abc";           // I am Suzuki. I am 15 years old.
 +suzuki.greeting();            // I am Suzuki. I am abc years old.
 +console.log(suzuki.address);  // undefined
 +
 +
 +// 鈴木さんの代理人
 +let proxy_suzuki = createProxyStudent('Suzuki', 15);
 +proxy_suzuki.greeting();
 +
 +proxy_suzuki.age = "abc";           // I am Suzuki. I am 15 years old.
 +proxy_suzuki.greeting();            // I am Suzuki. I am 15 years old.
 +console.log(proxy_suzuki.address);  // address
 </sxh> </sxh>
  
js/build-in/proxy.1626669915.txt.gz · 最終更新: 2021/07/19 13:45 by tanaka