Rumah >hujung hadapan web >tutorial js >Bagaimanakah anda boleh mengakses pembolehubah peribadi daripada fungsi yang ditentukan prototaip dalam JavaScript?
Sekatan Akses dalam Definisi Fungsi JavaScript
Dalam JavaScript, kebolehcapaian pembolehubah kepada fungsi bergantung pada skop di mana fungsi ditakrifkan. Pembolehubah persendirian, yang diisytiharkan di dalam pembina, hanya boleh diakses oleh fungsi dalam skop pembina itu. Ini menimbulkan had apabila fungsi ditakrifkan di luar pembina, seperti menggunakan sifat prototaip.
Fungsi Ditentukan Prototaip dan Pembolehubah Peribadi
Pertimbangkan kod berikut di mana a TestClass mempunyai privateField pembolehubah peribadi:
TestClass = function(){ var privateField = "hello"; this.nonProtoHello = function(){alert(privateField)}; }; TestClass.prototype.prototypeHello = function(){alert(privateField)};
Dalam contoh ini, nonProtoHello yang ditakrifkan dalam pembina mempunyai akses kepada privateField, manakala prototypeHello yang ditakrifkan menggunakan prototaip tidak. Ini kerana fungsi yang ditakrifkan pada prototaip tidak ditakrifkan dalam skop pembina.
Mengatasi Akses Pembolehubah Peribadi
Tidak mungkin membenarkan fungsi yang ditentukan prototaip untuk terus akses pembolehubah persendirian. Ini pada asasnya akan mewujudkan mekanisme skop terbalik, yang tidak disokong oleh JavaScript.
Alternatif: Getters and Setters
Untuk mendayakan fungsi yang ditentukan prototaip untuk memanipulasi pembolehubah persendirian, anda boleh membuat getter dan setter dalam pembina menggunakan objek ini. Kaedah awam ini boleh mengakses pembolehubah persendirian dan membenarkannya diubah oleh fungsi prototaip. Berikut ialah contoh:
function Person(name, secret) { // public this.name = name; // private var secret = secret; // public methods have access to private members this.setSecret = function(s) { secret = s; } this.getSecret = function() { return secret; } } // Must use getters/setters Person.prototype.spillSecret = function() { alert(this.getSecret()); };
Atas ialah kandungan terperinci Bagaimanakah anda boleh mengakses pembolehubah peribadi daripada fungsi yang ditentukan prototaip dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!