|
|
@ -60,34 +60,34 @@ function createGetter(isReadonly = false, shallow = false) { |
|
|
|
if (targetIsArray && hasOwn(arrayInstrumentations, key)) { |
|
|
|
return Reflect.get(arrayInstrumentations, key, receiver) |
|
|
|
} |
|
|
|
|
|
|
|
const res = Reflect.get(target, key, receiver) |
|
|
|
|
|
|
|
if ((isSymbol(key) && builtInSymbols.has(key)) || key === '__proto__') { |
|
|
|
return res |
|
|
|
} |
|
|
|
|
|
|
|
!isReadonly && track(target, TrackOpTypes.GET, key) |
|
|
|
if (!isReadonly) { |
|
|
|
track(target, TrackOpTypes.GET, key) |
|
|
|
} |
|
|
|
|
|
|
|
if (shallow) { |
|
|
|
return res |
|
|
|
} |
|
|
|
|
|
|
|
if (isRef(res)) { |
|
|
|
if (targetIsArray) { |
|
|
|
return res |
|
|
|
} else { |
|
|
|
// ref unwrapping, only for Objects, not for Arrays.
|
|
|
|
return res.value |
|
|
|
} |
|
|
|
// ref unwrapping, only for Objects, not for Arrays.
|
|
|
|
return targetIsArray ? res : res.value |
|
|
|
} |
|
|
|
|
|
|
|
if (isObject(res)) { |
|
|
|
// Convert returned value into a proxy as well. we do the isObject check
|
|
|
|
// here to avoid invalid value warning. Also need to lazy access readonly
|
|
|
|
// and reactive here to avoid circular dependency.
|
|
|
|
return isReadonly ? readonly(res) : reactive(res) |
|
|
|
} |
|
|
|
|
|
|
|
return isObject(res) |
|
|
|
? isReadonly |
|
|
|
? // need to lazy access readonly and reactive here to avoid
|
|
|
|
// circular dependency
|
|
|
|
readonly(res) |
|
|
|
: reactive(res) |
|
|
|
: res |
|
|
|
return res |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|