Skip to content

Commit a312b3e

Browse files
authored
refactor: use utils proxy insteads of Object.defineProperty (#743)
Co-authored-by: webfansplz <>
1 parent 4f738f7 commit a312b3e

File tree

3 files changed

+11
-16
lines changed

3 files changed

+11
-16
lines changed

src/apis/inject.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ComponentInstance } from '../component'
2-
import { hasOwn, warn, currentVMInFn, isFunction } from '../utils'
2+
import { hasOwn, warn, currentVMInFn, isFunction, proxy } from '../utils'
33
import { getCurrentInstance } from '../runtimeContext'
44

55
const NOT_FOUND = {}
@@ -28,9 +28,9 @@ export function provide<T>(key: InjectionKey<T> | string, value: T): void {
2828

2929
if (!vm._provided) {
3030
const provideCache = {}
31-
Object.defineProperty(vm, '_provided', {
31+
proxy(vm, '_provided', {
3232
get: () => provideCache,
33-
set: (v) => Object.assign(provideCache, v),
33+
set: (v: any) => Object.assign(provideCache, v),
3434
})
3535
}
3636

src/reactivity/reactive.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
hasOwn,
99
noopFn,
1010
isObject,
11+
proxy,
1112
} from '../utils'
1213
import { isComponentInstance, defineComponentInstance } from '../utils/helper'
1314
import { RefKey } from '../utils/symbols'
@@ -80,9 +81,7 @@ export function defineAccessControl(target: AnyObject, key: any, val?: any) {
8081
}
8182

8283
setupAccessControl(val)
83-
Object.defineProperty(target, key, {
84-
enumerable: true,
85-
configurable: true,
84+
proxy(target, key, {
8685
get: function getterHandler() {
8786
const value = getter ? getter.call(target) : val
8887
// if the key is equal to RefKey, skip the unwrap logic
@@ -92,7 +91,7 @@ export function defineAccessControl(target: AnyObject, key: any, val?: any) {
9291
return value
9392
}
9493
},
95-
set: function setterHandler(newVal) {
94+
set: function setterHandler(newVal: any) {
9695
if (getter && !setter) return
9796

9897
const value = getter ? getter.call(target) : val
@@ -206,15 +205,13 @@ export function shallowReactive(obj: any): any {
206205
setter = property.set
207206
}
208207

209-
Object.defineProperty(observed, key, {
210-
enumerable: true,
211-
configurable: true,
208+
proxy(observed, key, {
212209
get: function getterHandler() {
213210
const value = getter ? getter.call(obj) : val
214211
ob.dep?.depend()
215212
return value
216213
},
217-
set: function setterHandler(newVal) {
214+
set: function setterHandler(newVal: any) {
218215
if (getter && !setter) return
219216
if (setter) {
220217
setter.call(obj, newVal)

src/reactivity/readonly.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { reactive, Ref, UnwrapRef } from '.'
2-
import { isArray, isPlainObject, isObject, warn } from '../utils'
2+
import { isArray, isPlainObject, isObject, warn, proxy } from '../utils'
33
import { readonlySet } from '../utils/sets'
44
import { isReactive, observe } from './reactive'
55
import { isRef, RefImpl } from './ref'
@@ -82,15 +82,13 @@ export function shallowReadonly(obj: any): any {
8282
getter = property.get
8383
}
8484

85-
Object.defineProperty(readonlyObj, key, {
86-
enumerable: true,
87-
configurable: true,
85+
proxy(readonlyObj, key, {
8886
get: function getterHandler() {
8987
const value = getter ? getter.call(obj) : val
9088
ob.dep.depend()
9189
return value
9290
},
93-
set(v) {
91+
set(v: any) {
9492
if (__DEV__) {
9593
warn(`Set operation on key "${key}" failed: target is readonly.`)
9694
}

0 commit comments

Comments
 (0)