このページの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); | ||
</ | </ | ||