Przeglądaj źródła

Merge pull request #1765 from kazupon/fix/observer

Occurred TypeError in Observer.create
Evan You 10 lat temu
rodzic
commit
0a76d21a19
2 zmienionych plików z 18 dodań i 1 usunięć
  1. 1 1
      src/observer/index.js
  2. 17 0
      test/unit/specs/observer/observer_spec.js

+ 1 - 1
src/observer/index.js

@@ -47,7 +47,7 @@ Observer.create = function (value, vm) {
   }
   var ob
   if (
-    value.hasOwnProperty('__ob__') &&
+    Object.prototype.hasOwnProperty.call(value, '__ob__') &&
     value.__ob__ instanceof Observer
   ) {
     ob = value.__ob__

+ 17 - 0
test/unit/specs/observer/observer_spec.js

@@ -38,6 +38,23 @@ describe('Observer', function () {
     expect(ob2).toBe(ob)
   })
 
+  it('create on null', function () {
+    // on null
+    var obj = Object.create(null)
+    obj.a = {}
+    obj.b = {}
+    var ob = Observer.create(obj)
+    expect(ob instanceof Observer).toBe(true)
+    expect(ob.value).toBe(obj)
+    expect(obj.__ob__).toBe(ob)
+    // should've walked children
+    expect(obj.a.__ob__ instanceof Observer).toBe(true)
+    expect(obj.b.__ob__ instanceof Observer).toBe(true)
+    // should return existing ob on already observed objects
+    var ob2 = Observer.create(obj)
+    expect(ob2).toBe(ob)
+  })
+
   it('create on array', function () {
     // on object
     var arr = [{}, {}]