# 其他可变处理器
function deleteProperty(target: object, key: string | symbol): boolean {
const hadKey = hasOwn(target, key);
const oldValue = (target as any)[key];
const result = Reflect.deleteProperty(target, key);
if (result && hadKey) {
trigger(target, TriggerOpTypes.DELETE, key, undefined, oldValue);
}
return result;
}
function has(target: object, key: string | symbol): boolean {
const result = Reflect.has(target, key);
track(target, TrackOpTypes.HAS, key);
return result;
}
function ownKeys(target: object): (string | number | symbol)[] {
track(target, TrackOpTypes.ITERATE, ITERATE_KEY);
return Reflect.ownKeys(target);
}
export const mutableHandlers: ProxyHandler<object> = {
get,
set,
deleteProperty,
has,
ownKeys,
};
可见has
,ownKeys
是读取操作,所以调用跟踪,而delete
则显然是修改操作,所以进行trigger
← set ref 和 computed →