2
0
Эх сурвалжийг харах

warn unobservable objects

Evan You 10 жил өмнө
parent
commit
5705239ab1

+ 9 - 2
src/observer/index.js

@@ -25,7 +25,7 @@ function Observer (value) {
       : copyAugment
     augment(value, arrayMethods, arrayKeys)
     this.observeArray(value)
-  } else if (_.isPlainObject(value)) {
+  } else {
     this.walk(value)
   }
 }
@@ -52,11 +52,18 @@ Observer.create = function (value, vm) {
   ) {
     ob = value.__ob__
   } else if (
-    _.isObject(value) &&
+    (_.isArray(value) || _.isPlainObject(value)) &&
     !Object.isFrozen(value) &&
     !value._isVue
   ) {
     ob = new Observer(value)
+  } else if (process.env.NODE_ENV !== 'production') {
+    if (_.isObject(value) && !_.isArray(value) && !_.isPlainObject(value)) {
+      _.warn(
+        'Unobservable object found in data: ' +
+        Object.prototype.toString.call(value)
+      )
+    }
   }
   if (ob && vm) {
     ob.addVm(vm)

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

@@ -5,6 +5,10 @@ var _ = require('../../../../src/util')
 
 describe('Observer', function () {
 
+  beforeEach(function () {
+    spyOn(_, 'warn')
+  })
+
   it('create on non-observables', function () {
     // skip primitive value
     var ob = Observer.create(1)
@@ -193,4 +197,9 @@ describe('Observer', function () {
     config.proto = true
   })
 
+  it('warn unobservable object', function () {
+    Observer.create(window)
+    expect(hasWarned(_, 'Unobservable object found in data')).toBe(true)
+  })
+
 })