Saya sedang membangun kelas JavaScript dan saya ingin mengembalikan hasil di akhir rantai metode tanpa memanggil metode tertentu.

Contoh 1: myDate('01/01/2000').add(1, 'day') harus mengembalikan 01/02/2000.

Contoh 2: myDate('01/01/2000').add(1, 'day').format('MMMM D YYYY') harus mengembalikan January 2 2000.

Saya tahu bahwa ini mungkin menggunakan JS class karena melihatnya berfungsi di DayJs, saya hanya tidak mengerti caranya: https://github.com/iamkun/dayjs/blob/dev/src/index.js#L77

Untuk saat ini, apa yang saya miliki terlihat seperti ini:

class MyDate {
  constructor(date) {
    this.date = date;
  }

  add(count, unit) {
    this.date = // function
    return this; // to enable method chaining
  }

  format() {
    this.date = // function
    return this.date; // to return the desired result
  }

  get() {
    return this.date;
  }
}

// wrapper function to instantiate class on function call
const myDate = date => new MyDate(date);

Dengan pengaturan ini, saya mendapatkan perilaku berikut:

Contoh 3: myDate('01/01/2000').add(1, 'day') mengembalikan { date: 01/02/2000} alih-alih 01/02/2000.

Contoh 4: myDate('01/01/2000').add(1, 'day').format('MMMM D YYYY') mengembalikan January 2 2000 seperti yang diharapkan.

Contoh 5: myDate('01/01/2000').add(1, 'day').get() mengembalikan 01/02/2000 tetapi ada get() yang mengganggu yang ingin saya hilangkan...

Saya mencari masalah di Google, "js detect end of method chain" dan semacamnya, tetapi saya tidak dapat menemukan hasil apa pun yang akan menjelaskan cara kerjanya.

Terima kasih atas bantuan Anda!

0
RilDev 12 Mei 2021, 18:30

1 menjawab

Jawaban Terbaik

Berbicara secara logis metode add pada kelas harus mengembalikan instance objek alih-alih variabel anggota tertentu.

Apa yang Anda miliki saat ini sudah sempurna dan begitulah yang diharapkan setiap pengguna untuk bekerja.

Bayangkan sebuah kasus di mana Anda harus menambahkan variabel anggota lain, misalnya time ke kelas Anda dan Anda ingin merangkai sesuatu seperti object.add(1, 'day').add(5, 'hour'). Anda dapat mencapai ini hanya jika fungsi add Anda mengembalikan instance kelas Anda.

Juga baik-baik saja untuk melampirkan metode get() di akhir. Pertimbangkan paket moment.js yang terkenal. Bahkan mereka memiliki metode format() untuk mendapatkan objek tanggal yang sebenarnya.

Semoga ini menjelaskan kebingungan Anda.

0
Nisanth Reddy 12 Mei 2021, 15:39