@@ -171,9 +171,10 @@ export function observe (value, vm) {
171
171
* @param {Object } obj
172
172
* @param {String } key
173
173
* @param {* } val
174
+ * @param {Boolean } doNotObserve
174
175
*/
175
176
176
- export function defineReactive ( obj , key , val ) {
177
+ export function defineReactive ( obj , key , val , doNotObserve ) {
177
178
var dep = new Dep ( )
178
179
179
180
var property = Object . getOwnPropertyDescriptor ( obj , key )
@@ -185,7 +186,13 @@ export function defineReactive (obj, key, val) {
185
186
var getter = property && property . get
186
187
var setter = property && property . set
187
188
188
- var childOb = observe ( val )
189
+ // if doNotObserve is true, only use the child value observer
190
+ // if it already exists, and do not attempt to create it.
191
+ // this allows freezing a large object from the root and
192
+ // avoid unnecessary observation inside v-for fragments.
193
+ var childOb = doNotObserve
194
+ ? typeof val === 'object' && val . __ob__
195
+ : observe ( val )
189
196
Object . defineProperty ( obj , key , {
190
197
enumerable : true ,
191
198
configurable : true ,
@@ -215,7 +222,9 @@ export function defineReactive (obj, key, val) {
215
222
} else {
216
223
val = newVal
217
224
}
218
- childOb = observe ( newVal )
225
+ childOb = doNotObserve
226
+ ? typeof newVal === 'object' && newVal . __ob__
227
+ : observe ( newVal )
219
228
dep . notify ( )
220
229
}
221
230
} )
0 commit comments