Memiliki hierarki kelas berikut dalam proyek Deno TypeScript:

AccountPutController.ts

export class AccountPutController extends HttpController {

    constructor(commandBus: CommandBus) {
        super(commandBus)
    }

    async handle({ params, request, response } : {
            params: { id: string }
            request: any
            response: any
        } 
    ) {
        const { value : requestBody } = await request.body()

        super.dispatch(
            new CreateAccountCommand(
                params.id,
                requestBody.username,
                requestBody.emailAddress,
                requestBody.password
            )
        )
        
        response.status = 201
    }

}

HttpController.ts

export abstract class HttpController {

    private readonly commandBus: CommandBus

    constructor(commandBus: CommandBus) {
        this.commandBus = commandBus
    }

    dispatch(command: Command) {
        if(this === undefined) {
            console.log("This is undefined")
            return
        }            
        this.commandBus.dispatch(command)
    }

}

Kondisi "this === undefined" bernilai benar. Apakah ada yang tahu mengapa? Bagaimana saya bisa mencegahnya?

0
AlexTa 6 Juli 2020, 16:53

1 menjawab

Jawaban Terbaik

this ditentukan saat Anda memanggil suatu fungsi. Bagaimana Anda menerapkan metode handle Anda?

Pertimbangkan contoh ini:

abstract class Abstract {
  dispatch() {
    console.log(this);
  }
}

class Concrete extends Abstract {
  handle() {
    super.dispatch()
  }
}

Jika Anda melakukan ini, ini berfungsi seperti yang diharapkan:

new Concrete().handle(); // this === Concrete

Jika Anda melakukannya, this akan menjadi undefined:

const { handle } = new Concrete();

handle(); // this === undefined
1
Karol Majewski 6 Juli 2020, 14:15