Bagaimanakah saya boleh mengakses pembolehubah ahli persendirian daripada fungsi yang ditentukan prototaip dalam JavaScript?

Patricia Arquette
Lepaskan: 2024-10-27 03:11:30
asal
572 orang telah melayarinya

How can I access private member variables from prototype-defined functions in JavaScript?

Mengakses Pembolehubah Ahli Persendirian daripada Fungsi Ditentukan Prototaip

Dalam JavaScript, pembolehubah persendirian, yang diisytiharkan dalam pembina, tidak boleh diakses secara langsung kepada kaedah ditakrifkan dalam prototaip. Senario ini boleh diperhatikan dalam coretan kod berikut:

TestClass = function(){
  var privateField = "hello";
  this.nonProtoHello = function(){alert(privateField)};
};
TestClass.prototype.prototypeHello = function(){alert(privateField)};

// This executes successfully:
t.nonProtoHello()

// This fails:
t.prototypeHello()
Salin selepas log masuk

Tingkah laku ini berlaku kerana kaedah yang ditakrifkan dalam pembina mempunyai akses kepada pembolehubah persendirian kerana aksesnya kepada skop di mana ia ditakrifkan. Walau bagaimanapun, kaedah yang ditentukan prototaip tidak dibuat dalam skop pembina dan kekurangan akses kepada pembolehubah setempatnya.

Menangani Keperluan untuk Akses

Walaupun tiada cara langsung untuk memberikan akses kepada pembolehubah persendirian bagi kaedah yang ditentukan prototaip, terdapat pendekatan alternatif untuk mencapai kefungsian yang diingini:

  • Pendapat dan Penetap: Cipta pengambil dan penetap pada objek ini untuk menyediakan akses terkawal kepada pembolehubah persendirian. Kaedah yang ditentukan prototaip, serta kod lain yang mempunyai akses kepada objek, boleh menggunakan getter dan setter ini.

Berikut ialah contoh:

function Person(name, secret) {
  // public
  this.name = name;

  // private
  var secret = secret;

  // public methods with controlled access
  this.setSecret = function(s) {
    secret = s;
  }

  this.getSecret = function() {
    return secret;
  }
}

// Prototype-defined method using getters
Person.prototype.spillSecret = function() { alert(this.getSecret()); };
Salin selepas log masuk
  • Akses Tidak Langsung: Walaupun kaedah yang ditentukan prototaip tidak boleh mengakses terus pembolehubah persendirian, ia boleh berinteraksi dengan fungsi pembalut yang mempunyai akses. Ini membenarkan capaian tidak langsung tanpa mendedahkan pembolehubah persendirian terus kepada prototaip.

Ringkasnya, sementara mengakses pembolehubah persendirian daripada kaedah yang ditentukan prototaip sememangnya dihadkan, menggunakan pengambil dan penetap atau akses tidak langsung menyediakan penyelesaian yang fleksibel untuk mencapai akses terkawal kepada pembolehubah ini.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses pembolehubah ahli persendirian daripada fungsi yang ditentukan prototaip dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan