* Define a reactive property on an Object.
(
obj,
key,
val,
customSetter,
shallow
)
| 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 | } |
no test coverage detected