Javascript this 筆記
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: ƒ}