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);
    }
    // ...
}