-import { isObject, toRawType, def } from '@vue/shared'
+import { isObject, toRawType, def, hasOwn } from '@vue/shared'
import {
mutableHandlers,
readonlyHandlers,
return target
}
// target already has corresponding Proxy
- let observed = isReadonly ? target.__v_readonly : target.__v_reactive
- if (observed !== void 0) {
- return observed
+ if (
+ hasOwn(target, isReadonly ? ReactiveFlags.readonly : ReactiveFlags.reactive)
+ ) {
+ return isReadonly ? target.__v_readonly : target.__v_reactive
}
// only a whitelist of value types can be observed.
if (!canObserve(target)) {
return target
}
- const handlers = collectionTypes.has(target.constructor)
- ? collectionHandlers
- : baseHandlers
- observed = new Proxy(target, handlers)
+ const observed = new Proxy(
+ target,
+ collectionTypes.has(target.constructor) ? collectionHandlers : baseHandlers
+ )
def(
target,
isReadonly ? ReactiveFlags.readonly : ReactiveFlags.reactive,