fix(reactivity): call array subclass methods (#3624)
fix #2314, close #2315
This commit is contained in:
@@ -171,4 +171,45 @@ describe('reactivity/reactive/Array', () => {
|
||||
expect(original.indexOf(ref)).toBe(1)
|
||||
})
|
||||
})
|
||||
|
||||
describe('Array subclasses', () => {
|
||||
class SubArray<T> extends Array<T> {
|
||||
lastPushed: undefined | T
|
||||
lastSearched: undefined | T
|
||||
|
||||
push(item: T) {
|
||||
this.lastPushed = item
|
||||
return super.push(item)
|
||||
}
|
||||
|
||||
indexOf(searchElement: T, fromIndex?: number | undefined): number {
|
||||
this.lastSearched = searchElement
|
||||
return super.indexOf(searchElement, fromIndex)
|
||||
}
|
||||
}
|
||||
|
||||
test('calls correct mutation method on Array subclass', () => {
|
||||
const subArray = new SubArray(4, 5, 6)
|
||||
const observed = reactive(subArray)
|
||||
|
||||
subArray.push(7)
|
||||
expect(subArray.lastPushed).toBe(7)
|
||||
observed.push(9)
|
||||
expect(observed.lastPushed).toBe(9)
|
||||
})
|
||||
|
||||
test('calls correct identity-sensitive method on Array subclass', () => {
|
||||
const subArray = new SubArray(4, 5, 6)
|
||||
const observed = reactive(subArray)
|
||||
let index
|
||||
|
||||
index = subArray.indexOf(4)
|
||||
expect(index).toBe(0)
|
||||
expect(subArray.lastSearched).toBe(4)
|
||||
|
||||
index = observed.indexOf(6)
|
||||
expect(index).toBe(2)
|
||||
expect(observed.lastSearched).toBe(6)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user