de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 leemour
leemour
Question

Lewat ruang lingkup untuk forEach

I'm mencoba untuk menggunakan metode callback addToCount bukan anonymous function di forEach. Tapi aku bisa't access ini.count di dalamnya (kembali undefined).

function Words(sentence) {
  this.sentence = sentence;
  this.count = {};
  this.countWords();
}

Words.prototype = {
  countWords: function() {
    var words = this.sentence.split(/\W+/);
    words.forEach(this.addToCount);
  },
  addToCount: function(word) {
    word = word.toLowerCase();
    if (word == '') return;
    if (word in this.count)
      this.count[word] += 1;
    else
      this.count[word] = 1;
  }
}

Saya pikir masalahnya adalah ruang lingkup. Bagaimana saya bisa lulus ini untuk addToCount atau apakah ada cara lain untuk membuatnya bekerja?

42 2013-11-01T19:11:57+00:00 2
Pemrograman
javascript
Solution / Answer
 lonesomeday
lonesomeday
1 November 2013 в 7:14
2013-11-01T19:14:58+00:00
Lebih
Sumber
Sunting
#22691124

Anda perlu menggunakan Fungsi#mengikat untuk mengikat lingkup:

words.forEach(this.addToCount.bind(this));

Catatan bahwa ini tidak tersedia di semua browser: anda harus menggunakan shim (seperti yang disediakan di link di atas) untuk menambahkannya di browser yang don't dukungan Fungsi#bind.


Sebagai dandavis poin di komentar, anda dapat melewati nilai Array#forEach sebagai konteks untuk callback:

words.forEach(this.addToCount, this);
 lonesomeday
lonesomeday
Jawaban edit 1 November 2013 в 9:20
68
0
 NickM
NickM
1 November 2013 в 7:24
2013-11-01T19:24:46+00:00
Lebih
Sumber
Sunting
#22691125

Mencoba sesuatu seperti ini. I've digunakan yang daripada _this tapi juga saya've pindah addToCount sehingga's dalam countWords. Bahwa ternyata countWords menjadi penutupan yang mengandung itu.

Words.prototype = {
  countWords: function() {
    var that = this, words = this.sentence.split(/\W+/);
    words.forEach(function(word) {
        word = word.toLowerCase();
        if (word == '') return;
        if (word in that.count)
          that.count[word] += 1;
        else
          that.count[word] = 1;
      });
  }
}
2
0
Related communities 1
JavaScript Indonesia
JavaScript Indonesia
14 549 pengguna
Grup JavaScript yang membahas JavaScript, framework JS, dan Node JS secara universal. Cek Pinned Message untuk keterangan lebih lanjut. Komunitas ReactJS: https://t.me/react_idn
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
UbiBot UK
Terdaftar 15 jam yang lalu
2
Галина Утяшова
Terdaftar 1 hari yang lalu
3
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
4
Akshit Mehta
Terdaftar 1 minggu yang lalu
5
me you
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi