* Data
(parentVal, childVal, vm)
| 1146 | * Data |
| 1147 | */ |
| 1148 | function mergeDataOrFn(parentVal, childVal, vm) { |
| 1149 | if (!vm) { |
| 1150 | // in a Vue.extend merge, both should be functions |
| 1151 | if (!childVal) { |
| 1152 | return parentVal; |
| 1153 | } |
| 1154 | if (!parentVal) { |
| 1155 | return childVal; |
| 1156 | } |
| 1157 | // when parentVal & childVal are both present, |
| 1158 | // we need to return a function that returns the |
| 1159 | // merged result of both functions... no need to |
| 1160 | // check if parentVal is a function here because |
| 1161 | // it has to be a function to pass previous merges. |
| 1162 | return function mergedDataFn() { |
| 1163 | return mergeData( |
| 1164 | typeof childVal === "function" ? childVal.call(this, this) : childVal, |
| 1165 | typeof parentVal === "function" ? parentVal.call(this, this) : parentVal, |
| 1166 | ); |
| 1167 | }; |
| 1168 | } else { |
| 1169 | return function mergedInstanceDataFn() { |
| 1170 | // instance merge |
| 1171 | var instanceData = typeof childVal === "function" ? childVal.call(vm, vm) : childVal; |
| 1172 | var defaultData = typeof parentVal === "function" ? parentVal.call(vm, vm) : parentVal; |
| 1173 | if (instanceData) { |
| 1174 | return mergeData(instanceData, defaultData); |
| 1175 | } else { |
| 1176 | return defaultData; |
| 1177 | } |
| 1178 | }; |
| 1179 | } |
| 1180 | } |
| 1181 | |
| 1182 | strats.data = function(parentVal, childVal, vm) { |
| 1183 | if (!vm) { |