Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah saya boleh mengakses pembolehubah ahli persendirian daripada fungsi yang ditentukan prototaip dalam JavaScript?

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

Patricia Arquette
Patricia Arquetteasal
2024-10-27 03:11:30493semak imbas

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()

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()); };
  • 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!

Kenyataan:
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