MCPcopy Index your code
hub / github.com/keepfool/vue-tutorials / defineReactive

Function defineReactive

06.Router/basic/js/vue.js:2252–2298  ·  view source on GitHub ↗

* Define a reactive property on an Object. * * @param {Object} obj * @param {String} key * @param {*} val

(obj, key, val)

Source from the content-addressed store, hash-verified

2250 */
2251
2252 function defineReactive(obj, key, val) {
2253 var dep = new Dep();
2254
2255 var property = Object.getOwnPropertyDescriptor(obj, key);
2256 if (property && property.configurable === false) {
2257 return;
2258 }
2259
2260 // cater for pre-defined getter/setters
2261 var getter = property && property.get;
2262 var setter = property && property.set;
2263
2264 var childOb = observe(val);
2265 Object.defineProperty(obj, key, {
2266 enumerable: true,
2267 configurable: true,
2268 get: function reactiveGetter() {
2269 var value = getter ? getter.call(obj) : val;
2270 if (Dep.target) {
2271 dep.depend();
2272 if (childOb) {
2273 childOb.dep.depend();
2274 }
2275 if (isArray(value)) {
2276 for (var e, i = 0, l = value.length; i < l; i++) {
2277 e = value[i];
2278 e && e.__ob__ && e.__ob__.dep.depend();
2279 }
2280 }
2281 }
2282 return value;
2283 },
2284 set: function reactiveSetter(newVal) {
2285 var value = getter ? getter.call(obj) : val;
2286 if (newVal === value) {
2287 return;
2288 }
2289 if (setter) {
2290 setter.call(obj, newVal);
2291 } else {
2292 val = newVal;
2293 }
2294 childOb = observe(newVal);
2295 dep.notify();
2296 }
2297 });
2298 }
2299
2300
2301

Callers 6

vue.jsFile · 0.70
initPropFunction · 0.70
componentLinkFnFunction · 0.70
fnFunction · 0.70
stateMixinFunction · 0.70
applyOverrideFunction · 0.70

Calls 2

isArrayFunction · 0.85
observeFunction · 0.70

Tested by

no test coverage detected