瀏覽代碼

fix(reactivity): use isExtensible instead of isFrozen (#1753)

close #1784
wujieZ 5 年之前
父節點
當前提交
2787c34cd4
共有 2 個文件被更改,包括 8 次插入3 次删除
  1. 7 2
      packages/reactivity/__tests__/reactive.spec.ts
  2. 1 1
      packages/reactivity/src/reactive.ts

+ 7 - 2
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', () => {

+ 1 - 1
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)
   )
 }