@@ -10,7 +10,6 @@ import {
1010 warn ,
1111 query ,
1212 hasOwn ,
13- set ,
1413 isReserved ,
1514 bind
1615} from '../../util/index'
@@ -76,41 +75,35 @@ export default function (Vue) {
7675 */
7776
7877 Vue . prototype . _initData = function ( ) {
79- var propsData = this . _data
80- var optionsDataFn = this . $options . data
81- var optionsData = optionsDataFn && optionsDataFn ( )
82- var runtimeData
83- if ( process . env . NODE_ENV !== 'production' ) {
84- runtimeData = ( typeof this . _runtimeData === 'function'
78+ var dataFn = this . $options . data
79+ var data = this . _data = dataFn ? dataFn ( ) : { }
80+ var props = this . _props
81+ var runtimeData = this . _runtimeData
82+ ? typeof this . _runtimeData === 'function'
8583 ? this . _runtimeData ( )
86- : this . _runtimeData ) || { }
87- this . _runtimeData = null
88- }
89- if ( optionsData ) {
90- this . _data = optionsData
91- for ( var prop in propsData ) {
92- if ( process . env . NODE_ENV !== 'production' &&
93- hasOwn ( optionsData , prop ) &&
94- ! hasOwn ( runtimeData , prop ) ) {
95- warn (
96- 'Data field "' + prop + '" is already defined ' +
97- 'as a prop. Use prop default value instead.'
98- )
99- }
100- if ( this . _props [ prop ] . raw !== null ||
101- ! hasOwn ( optionsData , prop ) ) {
102- set ( optionsData , prop , propsData [ prop ] )
103- }
104- }
105- }
106- var data = this . _data
84+ : this . _runtimeData
85+ : null
10786 // proxy data on instance
10887 var keys = Object . keys ( data )
10988 var i , key
11089 i = keys . length
11190 while ( i -- ) {
11291 key = keys [ i ]
113- this . _proxy ( key )
92+ // there are two scenarios where we can proxy a data key:
93+ // 1. it's not already defined as a prop
94+ // 2. it's provided via a instantiation option AND there are no
95+ // template prop present
96+ if (
97+ ! props || ! hasOwn ( props , key ) ||
98+ ( runtimeData && hasOwn ( runtimeData , key ) && props [ key ] . raw === null )
99+ ) {
100+ this . _proxy ( key )
101+ } else if ( process . env . NODE_ENV !== 'production' ) {
102+ warn (
103+ 'Data field "' + key + '" is already defined ' +
104+ 'as a prop. Use prop default value instead.'
105+ )
106+ }
114107 }
115108 // observe data
116109 observe ( data , this )
0 commit comments