forked from Mayandev/fe-interview-handwrite
-
Notifications
You must be signed in to change notification settings - Fork 0
/
proxy.js
31 lines (27 loc) · 741 Bytes
/
proxy.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const deepClone = require('./deepclone');
function MyProxy(obj, handler) {
console.log(handler);
let _target = deepClone(obj);
Object.keys(_target).forEach(key => {
Object.defineProperty(_target, key, {
get: () => handler.get && handler.get(obj, key),
set: newVal => handler.set && handler.set(obj, key, newVal),
});
});
return _target;
}
let person = {
name: 'jack',
city: 'Beijing',
};
let proxy = new MyProxy(person, {
get: (target, propKey) => target[propKey],
set: (target, propKey, value) => {
target[propKey] = value;
},
});
// test
console.log(proxy.name); // jack
proxy.city = 'Nanjing';
console.log(proxy.city); // Nanjing
console.log(person); // { name: 'jack', city: 'Nanjing' }