响应式实现
const reactiveMap = new WeakMap();
const enum ReactiveFlag {
IS_REACTIVE = '__v_isReactive'
}
export function reactive(target) {
if(!isObject(target)) return;
if(target[ReactiveFlag.IS_REACTIVE]) {
return target;
}
let existingProxy = reactiveMap.get(target);
if(existingProxy) {
return existingProxy;
}
const proxy = new Proxy(target, {
get(target, key, receiver) {
if(key === ReactiveFlag.IS_REACTIVE) {
return true;
}
return Reflect.get(target, key, receiver);
},
set(target, key, value, receiver) {
return Reflect.set(target, key, value, receiver);
}
});
reactiveMap.set(target, proxy);
return proxy;
}
function isObject(target) {
if(typeof target === 'object' && target !== null) return true;
return false;
}