このページの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:// | + | [[https:// |
| 行 20: | 行 20: | ||
| <sxh javascript; | <sxh javascript; | ||
| + | class Student { | ||
| - | TODO | + | constructor(name, |
| + | this.name = name; | ||
| + | this.age = age; | ||
| + | } | ||
| + | greeting() { | ||
| + | console.log(`I am ${this.name}. I am ${this.age} years old.`); | ||
| + | } | ||
| + | } | ||
| + | function createProxyStudent(name, | ||
| + | return new Proxy(new Student(name, | ||
| + | get(target, prop) { | ||
| + | // メンバーが見つからない場合はそのままメンバー名を返す | ||
| + | return prop in target ? target[prop] : prop; | ||
| + | }, | ||
| + | |||
| + | set(target, prop, val) { | ||
| + | if(prop==" | ||
| + | return false; | ||
| + | } | ||
| + | target[prop] = val; | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | // オリジナルの鈴木さん | ||
| + | let suzuki = new Student(' | ||
| + | suzuki.greeting(); | ||
| + | |||
| + | suzuki.age = " | ||
| + | suzuki.greeting(); | ||
| + | console.log(suzuki.address); | ||
| + | |||
| + | |||
| + | // 鈴木さんの代理人 | ||
| + | let proxy_suzuki = createProxyStudent(' | ||
| + | proxy_suzuki.greeting(); | ||
| + | |||
| + | proxy_suzuki.age = " | ||
| + | proxy_suzuki.greeting(); | ||
| + | console.log(proxy_suzuki.address); | ||
| </ | </ | ||