TypeError 成员未定义
TypeError member is undefined
你好,我创建了这个 Typescript class 来重用我的搜索。
export class WorkerSearch {
private loadingWorkers: Ref<boolean>;
private possibleWorkers: Ref<UnwrapRef<Array<TsadWorker>>>;
constructor(loadingWorkers: Ref<boolean>, possibleWorkers: Ref<UnwrapRef<TsadWorker[]>>) {
this.loadingWorkers = loadingWorkers;
this.possibleWorkers = possibleWorkers;
}
public workerSearch(email: string) {
console.log("worker search");
this.loadingWorkers.value = true;
const map = new Map<string, StringFilterField>();
map.set("email", StringFilterField.fromValue(email));
const searchRequest = new SearchRequest(10, 0, map);
axios
.post(process.env.VUE_APP_BACKEND_URL + "users/workers/search", searchRequest)
.then(response => {
console.log("response recieved")
this.possibleWorkers.value = response.data
this.loadingWorkers.value = false
})
.catch(error => {
defaultErrorHandler(error)
})
}
}
但是在使用的时候控制台报错:“error TypeError: this.loadingWorkers is undefined”
如果我删除“this.loadingWorkers = true”,错误会显示“错误类型错误:this.possibleWorkers 未定义”。
这怎么可能?
这是构造函数调用:
let loadingWorkers = ref(false);
let possibleWorkers = ref(new Array<TsadWorker>());
const workerSearchObj = new WorkerSearch(loadingWorkers, possibleWorkers);
感谢您的帮助
当您从 WorkerSearch
实例中提取它并将其传递到其他地方时,您的 workerSearch
方法是未绑定的,也就是说,this
不一定是 workerSearchObj
将方法调用为 workerSearchObj.workerSearch()
let loadingWorkers = ref(false);
let possibleWorkers = ref(new Array<TsadWorker>());
const workerSearchObj = new WorkerSearch(loadingWorkers, possibleWorkers);
// instead of
doSomethingWith(workerSearchObj.workerSearch)
// bind the value of `this` before passing the function
doSomethingWith(workerSearchObj.workerSearch.bind(workerSearchObj))
// or wrap the function
doSomethingWith(mail => workerSearchObj.workerSearch(mail))
// or bind the function from within the class constructor
export class WorkerSearch {
// ...
constructor(loadingWorkers: Ref<boolean>, possibleWorkers: Ref<UnwrapRef<TsadWorker[]>>) {
// ...
this.workerSearch = this.workerSearch.bind(this);
}
// ...
}
你好,我创建了这个 Typescript class 来重用我的搜索。
export class WorkerSearch {
private loadingWorkers: Ref<boolean>;
private possibleWorkers: Ref<UnwrapRef<Array<TsadWorker>>>;
constructor(loadingWorkers: Ref<boolean>, possibleWorkers: Ref<UnwrapRef<TsadWorker[]>>) {
this.loadingWorkers = loadingWorkers;
this.possibleWorkers = possibleWorkers;
}
public workerSearch(email: string) {
console.log("worker search");
this.loadingWorkers.value = true;
const map = new Map<string, StringFilterField>();
map.set("email", StringFilterField.fromValue(email));
const searchRequest = new SearchRequest(10, 0, map);
axios
.post(process.env.VUE_APP_BACKEND_URL + "users/workers/search", searchRequest)
.then(response => {
console.log("response recieved")
this.possibleWorkers.value = response.data
this.loadingWorkers.value = false
})
.catch(error => {
defaultErrorHandler(error)
})
}
}
但是在使用的时候控制台报错:“error TypeError: this.loadingWorkers is undefined”
如果我删除“this.loadingWorkers = true”,错误会显示“错误类型错误:this.possibleWorkers 未定义”。
这怎么可能?
这是构造函数调用:
let loadingWorkers = ref(false);
let possibleWorkers = ref(new Array<TsadWorker>());
const workerSearchObj = new WorkerSearch(loadingWorkers, possibleWorkers);
感谢您的帮助
当您从 WorkerSearch
实例中提取它并将其传递到其他地方时,您的 workerSearch
方法是未绑定的,也就是说,this
不一定是 workerSearchObj
将方法调用为 workerSearchObj.workerSearch()
let loadingWorkers = ref(false);
let possibleWorkers = ref(new Array<TsadWorker>());
const workerSearchObj = new WorkerSearch(loadingWorkers, possibleWorkers);
// instead of
doSomethingWith(workerSearchObj.workerSearch)
// bind the value of `this` before passing the function
doSomethingWith(workerSearchObj.workerSearch.bind(workerSearchObj))
// or wrap the function
doSomethingWith(mail => workerSearchObj.workerSearch(mail))
// or bind the function from within the class constructor
export class WorkerSearch {
// ...
constructor(loadingWorkers: Ref<boolean>, possibleWorkers: Ref<UnwrapRef<TsadWorker[]>>) {
// ...
this.workerSearch = this.workerSearch.bind(this);
}
// ...
}