pinia

如果getters使用兩個function的話this會變成調用函數的人:

getter(state) {
  return function (param) {
    return this
  }
}

// in component
const store = useStore()
const { getter } = storeToRefs(store)

// 這邊this會變成getter
getter.value(param)

如果getters裡面return的function使用arrow function, 那this就會變成arrow function create時的this.

getter執行時, 會create新的arrow function. getter執行時的this就是store. 因為invoke getter的時候通常會是store.getter

如果透過storeToRefs(store) destructure後再執行的話會變成getter.value, 而value會由pinia特殊處裡(純屬猜測: 用.bind(store)等…)

getter(state) {
  return (param) => {
    return this
  }
}

// in component
const store = useStore()
const { getter } = storeToRefs(store)

// 這邊this會變成store
getter.value(param)

this in arrow function

function func () {
  return () => {
    console.log(this)
  }
}

const obj1 = { name: 'obj1' }
const obj2 = { name: 'obj2' }

obj1.func = func
obj2.func = obj1.func()
obj2.func() // result: {name: 'obj1', func: ƒ}