fix(reactivity): revert to Reflect.get and add test cases

This commit is contained in:
Evan You 2019-10-18 15:31:28 -04:00
parent 068902abec
commit d69d3bf765
2 changed files with 32 additions and 3 deletions

View File

@ -249,6 +249,36 @@ describe('reactivity/effect', () => {
expect(dummy).toBe(newFunc)
})
it('should observe chained getters relying on this', () => {
const obj = reactive({
a: 1,
get b() {
return this.a
}
})
let dummy
effect(() => (dummy = obj.b))
expect(dummy).toBe(1)
obj.a++
expect(dummy).toBe(2)
})
it('should observe methods relying on this', () => {
const obj = reactive({
a: 1,
b() {
return this.a
}
})
let dummy
effect(() => (dummy = obj.b()))
expect(dummy).toBe(1)
obj.a++
expect(dummy).toBe(2)
})
it('should not observe set operations without a value change', () => {
let hasDummy, getDummy
const obj = reactive({ prop: 'value' })

View File

@ -12,9 +12,8 @@ const builtInSymbols = new Set(
)
function createGetter(isReadonly: boolean) {
return function get(target: any, key: string | symbol) {
// not using Reflect.get here for perf reasons
const res = target[key]
return function get(target: any, key: string | symbol, receiver: any) {
const res = Reflect.get(target, key, receiver)
if (isSymbol(key) && builtInSymbols.has(key)) {
return res
}