MCPcopy
hub / github.com/fanmingming/live / defineReactive$$1

Function defineReactive$$1

m3u8/vue.js:1013–1072  ·  view source on GitHub ↗

* Define a reactive property on an Object.

(
    obj,
    key,
    val,
    customSetter,
    shallow
  )

Source from the content-addressed store, hash-verified

1011 * Define a reactive property on an Object.
1012 */
1013 function defineReactive$$1 (
1014 obj,
1015 key,
1016 val,
1017 customSetter,
1018 shallow
1019 ) {
1020 var dep = new Dep();
1021
1022 var property = Object.getOwnPropertyDescriptor(obj, key);
1023 if (property && property.configurable === false) {
1024 return
1025 }
1026
1027 // cater for pre-defined getter/setters
1028 var getter = property && property.get;
1029 var setter = property && property.set;
1030 if ((!getter || setter) && arguments.length === 2) {
1031 val = obj[key];
1032 }
1033
1034 var childOb = !shallow && observe(val);
1035 Object.defineProperty(obj, key, {
1036 enumerable: true,
1037 configurable: true,
1038 get: function reactiveGetter () {
1039 var value = getter ? getter.call(obj) : val;
1040 if (Dep.target) {
1041 dep.depend();
1042 if (childOb) {
1043 childOb.dep.depend();
1044 if (Array.isArray(value)) {
1045 dependArray(value);
1046 }
1047 }
1048 }
1049 return value
1050 },
1051 set: function reactiveSetter (newVal) {
1052 var value = getter ? getter.call(obj) : val;
1053 /* eslint-disable no-self-compare */
1054 if (newVal === value || (newVal !== newVal && value !== value)) {
1055 return
1056 }
1057 /* eslint-enable no-self-compare */
1058 if (customSetter) {
1059 customSetter();
1060 }
1061 // #7981: for accessor properties without setter
1062 if (getter && !setter) { return }
1063 if (setter) {
1064 setter.call(obj, newVal);
1065 } else {
1066 val = newVal;
1067 }
1068 childOb = !shallow && observe(newVal);
1069 dep.notify();
1070 }

Callers 5

vue.jsFile · 0.85
setFunction · 0.85
initInjectionsFunction · 0.85
initRenderFunction · 0.85
loopFunction · 0.85

Calls 2

observeFunction · 0.85
dependArrayFunction · 0.85

Tested by

no test coverage detected