-
以下语法是怎么实现的,请大家开脑洞 (更新)
2017-07-04 16:07我说的解析不是词法解析。是运行的时候,执行到 this.lastName 这句的时候 😄
就触发了 get 方法,会去执行 dep.depend() -
以下语法是怎么实现的,请大家开脑洞 (更新)
2017-07-04 15:41具体你可以看下这段源码
Object.defineProperty(obj, key, { enumerable: true, configurable: true, get: function reactiveGetter () { var value = getter ? getter.call(obj) : val; if (Dep.target) { dep.depend(); if (childOb) { childOb.dep.depend(); } if (Array.isArray(value)) { dependArray(value); } } return value }, set: function reactiveSetter (newVal) { var value = getter ? getter.call(obj) : val; /* eslint-disable no-self-compare */ if (newVal === value || (newVal !== newVal && value !== value)) { return } /* eslint-enable no-self-compare */ if ("development" !== 'production' && customSetter) { customSetter(); } if (setter) { setter.call(obj, newVal); } else { val = newVal; } childOb = observe(newVal); dep.notify(); } });
-
以下语法是怎么实现的,请大家开脑洞 (更新)
2017-07-04 15:38没有。
在运行时,会解析到 this.firstName 和 this.lastName
这个时候就会触发 get 方法收集
Object.defineProperty(target, 'firstName', {... get: () => { // 收集依赖 }})
Object.defineProperty(target, 'lastName', {... get: () => { // 收集依赖 }}) -
以下语法是怎么实现的,请大家开脑洞 (更新)
2017-07-04 15:06主要使用了 Object.defineProperty 的 get 和 set 原理
在执行 computed.fullName 的时候通过 get 收集 fullName 的依赖
在 data 被赋值时,set 会对该收集的依赖进行 notify@feix