Bagaimana untuk membuat pembolehubah peribadi dalam JavaScript?

WBOY
Lepaskan: 2023-08-23 21:37:02
ke hadapan
905 orang telah melayarinya

如何在 JavaScript 中创建私有变量?

Penutupan, simbol, WeakMap, medan peribadi kelas dan proksi ialah beberapa teknik yang boleh digunakan untuk mencipta pembolehubah peribadi dalam JavaScript. Setiap teknologi mempunyai kelebihan dan kekurangan, jadi adalah penting untuk memilih yang paling sesuai dengan keperluan anda.

Seperti kebanyakan bahasa pengaturcaraan lain, JavaScript juga mempunyai konsep pembolehubah persendirian dan pembolehubah awam. Pembolehubah persendirian hanya boleh diakses dan diubah oleh kod yang dimiliki oleh skop yang sama, tetapi pembolehubah awam boleh diakses dan diubah oleh mana-mana kod. Mari lihat teknik yang berbeza untuk mencipta pembolehubah peribadi dalam JavaScript.

Gunakan penutupan

Kaedah penutupan ialah cara untuk mencipta pembolehubah peribadi dalam JavaScript. Fungsi ialah penutupan jika ia boleh mengakses pembolehubah yang ditakrifkan dalam skop fungsi induknya walaupun selepas fungsi induk telah selesai dan dikembalikan. Kita boleh menentukan pembolehubah di dalam fungsi supaya ia menjadi peribadi dan hanya boleh diakses oleh kod di dalam fungsi itu.

Contoh

<html>
<body>
   <div id="demo"></div>
   <script>
      function createPrivateVariable() {
         let privateVariable = "This is a private variable";
         return {
            getValue: function () {
               return privateVariable;
            },
            setValue: function (value) {
               privateVariable = value;
            },
         };
      }
      let privateVar = createPrivateVariable();
      document.getElementById("demo").innerHTML = privateVar.getValue();
   </script>
</body>
</html>
Salin selepas log masuk

Fungsi createPrivateVariable dalam contoh di atas mengembalikan objek dengan kaedah getValue dan setValue. Kaedah ini boleh mendapatkan semula atau menukar nilai privateVariable yang diisytiharkan dalam fungsi induk kerana mereka mempunyai akses kepadanya. Jika anda cuba mengakses privateVariable dari luar fungsi, ralat rujukan berlaku.

Gunakan jenis data simbolik

Menggunakan jenis data simbolik ialah cara kedua untuk mencipta pembolehubah peribadi. Simbol boleh digunakan sebagai kunci harta kerana ia adalah pengecam bukan rentetan yang berbeza. Kerana ia unik, program luaran tidak boleh mengakses atau mengubahnya dengan mudah.

let privateVariable = Symbol();
let obj = {
   [privateVariable]: "This is a private variable"
};
console.log(obj[privateVariable]);
Salin selepas log masuk

Contoh

Kita boleh menggunakan kod di atas seperti berikut -

<html>
<body>
   <div id="demo"></div>
   <script>
      let privateVar = Symbol();
      let obj = {
         [privateVar]: "This is a private variable"
      };
      Object.defineProperty(obj, 'getValue', {
         get: function() {
            return obj[privateVar];
         }
      });
      document.getElementById("demo").innerHTML = obj.getValue;
   </script>
</body>
</html>
Salin selepas log masuk

Dalam contoh ini, simbol bernama privateVariable telah ditakrifkan dan digunakan sebagai kunci sifat objek. Oleh kerana ia adalah Simbol, anda tidak boleh mendapatkan nilai harta menggunakan notasi titik, tetapi anda boleh mengaksesnya melalui objek menggunakan notasi kurungan segi empat sama.

Guna WeakMap

WeakMaps boleh digunakan sebagai cara ketiga untuk membina pembolehubah persendirian. Enjin JavaScript hanya merujuk pasangan nilai kunci dengan lemah dalam WeakMap, yang membolehkan anda memautkan objek dengan kunci. Ini menjadikannya lebih sukar untuk mengekalkan rujukan kepada pembolehubah persendirian secara salah, kerana pemungut sampah akan memusnahkan pasangan nilai kunci jika tiada rujukan lain kepada kunci.

Contoh

<html>
<body>
   <div id="demo"></div>
   <script>
      let privateVariables = new WeakMap();
      let obj = {};
      privateVariables.set(obj, "This is a private variable");
      document.getElementById("demo").innerHTML = privateVariables.get(obj);
   </script>
</body>
</html>
Salin selepas log masuk

Dalam contoh ini, kami mencipta WeakMap bernama privateVariables untuk memegang pembolehubah peribadi objek. Kaedah get() digunakan untuk mendapatkan pembolehubah persendirian selepas memautkannya ke objek menggunakan kaedah set(). Walau bagaimanapun, pembolehubah persendirian tidak boleh diakses dari luar skop yang dibentuk oleh objek kerana anda boleh mengaksesnya hanya apabila anda mempunyai rujukan kepada objek.

Gunakan sintaks kelas berorientasikan objek

Menggunakan sintaks kelas berorientasikan objek juga boleh digunakan untuk mencipta pembolehubah persendirian. Kata kunci kelas JavaScript membolehkan kami mentakrifkan kelas yang bertindak sebagai templat untuk objek. Kelas boleh mentakrifkan pembolehubah dan menambah simbol # sebelum nama pembolehubah untuk menjana pembolehubah persendirian ini adalah ciri eksperimen dan mewakili pembolehubah persendirian. Ia tidak disyorkan untuk menggunakan ciri ini dalam kod pengeluaran kerana ia belum disokong secara meluas.

Contoh

<html>
<body>
   <p id="output"></p>
   <script>
      class MyClass {
         #privateVariable = "This is a private variable";
         getValue() {
            return this.#privateVariable;
         }
         setValue(value) {
            this.#privateVariable = value;
         }
      }
      let obj = new MyClass();
      document.getElementById("output").innerHTML = obj.getValue(); // "This is a private variable"
      obj.setValue("New value");
      document.getElementById("output").innerHTML = obj.getValue(); // "New value"
   </script>
</body>
</html>
Salin selepas log masuk

Dalam contoh ini, kelas bernama MyClass dibina menggunakan pembolehubah persendirian #privateVariable, getValue dan setValue. Ralat rujukan berlaku jika kaedah di luar kelas cuba mengakses pembolehubah peribadi yang hanya boleh diakses oleh kaedah di dalam kelas.

Gunakan objek proksi

Akhir sekali, menggunakan objek Proksi ialah pilihan lain untuk membina pembolehubah persendirian. Objek yang boleh digunakan untuk memintas atau mengubah tingkah laku objek lain dipanggil proksi. Anda boleh mencipta pembolehubah peribadi yang hanya boleh diakses melalui kod dengan proksi dengan merangkum objek dalam proksi.

Contoh

<html>
<body>
   <div id="demo"></div>
   <script>
      let privateVariable = "This is a private variable-proxy obj.";
      let handler = {
         get: function (target, name) {
            if (name === "privateVariable") {
               return privateVariable;
            }
         },
         set: function (target, name, value) {
            if (name === "privateVariable") {
               privateVariable = value;
            }
         },
      };
      let obj = new Proxy({}, handler);
      document.getElementById("demo").innerHTML = obj.privateVariable;
   </script>
</body>
</html>
Salin selepas log masuk

Dalam contoh ini, proksi dengan pengendali dengan kaedah getter dan setter telah dibina. Kaedah ini boleh mendapatkan semula atau menukar nilai pembolehubah persendirian yang ditakrifkan di luar proksi dan boleh mengaksesnya. Walau bagaimanapun, disebabkan ralat rujukan, pembolehubah persendirian tidak akan dapat diakses dari luar proksi.

Atas ialah kandungan terperinci Bagaimana untuk membuat pembolehubah peribadi dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!