diff --git a/packages/reactivity/__tests__/reactive.spec.ts b/packages/reactivity/__tests__/reactive.spec.ts index c0b10969ba4..b7f9cdf4eb3 100644 --- a/packages/reactivity/__tests__/reactive.spec.ts +++ b/packages/reactivity/__tests__/reactive.spec.ts @@ -183,11 +183,16 @@ describe('reactivity/reactive', () => { expect(isReactive(obj.bar)).toBe(false) }) - test('should not observe frozen objects', () => { + test('should not observe non-extensible objects', () => { const obj = reactive({ - foo: Object.freeze({ a: 1 }) + foo: Object.preventExtensions({ a: 1 }), + // sealed or frozen objects are considered non-extensible as well + bar: Object.freeze({ a: 1 }), + baz: Object.seal({ a: 1 }) }) expect(isReactive(obj.foo)).toBe(false) + expect(isReactive(obj.bar)).toBe(false) + expect(isReactive(obj.baz)).toBe(false) }) test('should not observe objects with __v_skip', () => { diff --git a/packages/reactivity/src/reactive.ts b/packages/reactivity/src/reactive.ts index 8e333fc81b5..4dea9e00c86 100644 --- a/packages/reactivity/src/reactive.ts +++ b/packages/reactivity/src/reactive.ts @@ -39,7 +39,7 @@ const canObserve = (value: Target): boolean => { return ( !value[ReactiveFlags.SKIP] && isObservableType(toRawType(value)) && - !Object.isFrozen(value) + Object.isExtensible(value) ) }