Apa itu freeze and seal di javascript?

ECMAScript 5 memperkenalkan metode Objek baru ke Javascript. Diantaranya Obyek. freeze(), Objek. segel(), Objek. metode preventExtensions() akan dibahas dalam perbandingan satu sama lain

Sebelum memahami arti dari masing-masing metode, penting untuk mengetahui struktur objek dasar

Struktur Objek

Objek adalah tipe data Javascript yang dapat mewakili entitas yang berisi properti atau perilaku/metode tertentu. Properti ini dapat diubah atau dihapus atau properti baru dapat ditambahkan ke objek

Ada dua jenis properti dalam sebuah objek

Properti data — Properti objek normal yang ditentukan pada objek

Properti aksesor — Fungsi yang memungkinkan mendapatkan dan menetapkan nilai properti objek. Cukup metode pengambil dan penyetel. Properti ini dapat dikenali sebagai get dan set di depan nama properti

Contoh

let person = {
firstName: "James",
lastName: "Bond",

get fullName() {
return `${this.firstName} ${this.lastName}`;
},

set fullName(name) {
[this.firstName, this.lastName] = name.split(" ");
}
};

// set fullName is executed with the given name value.
person.fullName = "Jane Iyer";

console.log(person.firstName); // Jane
console.log(person.lastName); // Iyer

Objek apa pun yang kami buat mewarisi properti dari konstruktor Objek JavaScript. Obyek. prototipe adalah salah satu properti yang diwarisi oleh objek semacam itu. Dengan menggunakan properti prototype kita dapat menambahkan properti atau metode baru ke semua objek yang ada. Dapat memodifikasi apa yang murni dimiliki oleh objek tanpa mewarisi dari Objek tersebut. prototipe

Contoh

let person = {
firstName: "James",
lastName: "Bond"
}
_

Properti (properti data) memiliki nama dan nilai yang ditetapkan sebagai pasangan nilai kunci. Selain itu, setiap properti memiliki beberapa meta data yang dapat mengontrol status/nilainya

enumerable — Nilai Boolean benar/salah. Jika disetel ke properti true dapat disebutkan/didaftarkan dalam loop. Jika tidak, tidak

dapat dikonfigurasi — nilai Boolean benar/salah. Jika disetel ke properti true dapat dikonfigurasi ulang. Jika tidak, tidak

writable — Nilai Boolean benar/salah. Jika disetel ke properti true dapat diubah. Jika tidak, tidak

Secara default semua properti dapat dibaca. Bergantung pada metadata di atas, propertinya dapat dimutasi

Sebaliknya, properti Accessor tidak memiliki nilai. Mereka telah mendapatkan, mengatur fungsi yang mengontrol aksesibilitas properti

get — Fungsi yang tidak memiliki argumen dan dipanggil saat membaca properti

set — Fungsi yang memiliki argumen tunggal dan dipanggil pada set properti

enumerable — Nilai Boolean benar/salah. Jika disetel ke properti true dapat disebutkan/didaftarkan dalam loop. Jika tidak, tidak

dapat dikonfigurasi — nilai Boolean benar/salah. Jika disetel ke properti true dapat dikonfigurasi ulang. Jika tidak, tidak

Tidak ada yang dapat ditulisi untuk properti accessor

Obyek. membekukan()

Obyek. freeze() cukup mengubah objek yang diteruskan sebagai argumen menjadi keadaan beku. Objek yang dipanggil dengan metode ini tidak dapat memiliki perubahan lebih lanjut

Contoh

Object.freeze(person)

Tidak dapat menambahkan properti baru

Tidak dapat menghapus properti yang ada

Tidak dapat mengubah nilai properti yang ada

Tidak dapat mengonfigurasi ulang properti yang ada. dapat ditulis dan dikonfigurasi disetel ke false

Tidak dapat mengubah prototipenya

Mencoba melakukan perubahan apa pun yang disebutkan di atas setelah objek dibekukan akan gagal dan akan menimbulkan kesalahan dalam mode ketat

Obyek. isFrozen() adalah metode Objek untuk memeriksa apakah suatu objek dibekukan dengan meneruskan objek sebagai argumen

Contoh

Object.isFrozen(person)
Objek. segel()

Obyek. seal() cukup mengubah objek yang diteruskan sebagai argumen menjadi keadaan tersegel. Objek yang dipanggil dengan metode ini tidak dapat memiliki properti baru yang ditambahkan. Tapi itu bisa mengubah nilai properti yang ada selama metadata yang dapat ditulis itu benar

Contoh

Object.seal(person)
_

Tidak dapat menambahkan properti baru

Tidak dapat menghapus properti yang ada

Tidak dapat mengonfigurasi ulang properti yang ada

Tidak dapat mengonversi properti data menjadi properti pengakses atau sebaliknya

Secara default, objek dapat diperluas dalam arti bahwa properti baru dapat ditambahkan. Mencoba melakukan perubahan apa pun yang disebutkan di atas setelah objek disegel akan gagal dan akan menimbulkan kesalahan dalam mode ketat

Obyek. isSealed() adalah metode Objek untuk memeriksa apakah suatu objek disegel dengan meneruskan objek sebagai argumen

Contoh

Object.isSealed(person)
Objek. preventExtensions()

Obyek. preventExtensions() cukup mengonversi objek yang diteruskan sebagai argumen menjadi status yang tidak dapat diperluas. Objek yang dipanggil dengan metode ini tidak dapat memiliki properti baru yang ditambahkan. Metode ini mewarisi fungsionalitas dari objek supersetnya. segel. Oleh karena itu, ini dapat mengubah nilai properti yang ada selama metadata yang dapat ditulis benar. Berbeda dengan objek yang disegel, objek yang tidak dapat diperluas dapat dihapus atau dikonfigurasi ulang

Contoh

Object.preventExtensions(person)
_

Mencoba menambahkan properti baru setelah objek tidak dapat diperluas akan gagal dan akan menimbulkan kesalahan dalam mode ketat

Obyek. isExtensible() adalah metode Objek untuk memeriksa apakah suatu objek dapat diperluas dengan meneruskan objek sebagai argumen

Contoh

Object.isExtensible(person)

Catatan. Objek yang berdiri sebagai properti di dalam objek atau objek dalam/anak dari suatu objek dapat dimodifikasi kecuali ada yang disegel/dibekukan secara terpisah. Dengan kata lain bahwa pembekuan/segel objek mengontrol setiap perubahan pada properti objek secara dangkal, artinya referensi properti langsung tidak dapat diubah. Tapi properti bersarang di dalam objek properti objek langsung dapat diubah

Apa itu segel dalam JavaScript?

Menyegel objek mencegah ekstensi dan membuat properti yang ada tidak dapat dikonfigurasi . Objek yang disegel memiliki seperangkat properti tetap. properti baru tidak dapat ditambahkan, properti yang ada tidak dapat dihapus, enumerabilitas dan konfigurasinya tidak dapat diubah, dan prototipenya tidak dapat ditetapkan ulang.

Apa yang dibekukan dalam JavaScript?

Objek yang dibekukan tidak dapat diubah lagi . properti baru tidak dapat ditambahkan, properti yang ada tidak dapat dihapus, enumerabilitas, konfigurasi, kemampuan menulis, atau nilainya tidak dapat diubah, dan prototipe objek tidak dapat ditetapkan ulang. freeze() mengembalikan objek yang sama yang diteruskan.

Apa perbedaan antara pembekuan objek () vs const?

Obyek. freeze bekerja pada nilai, dan lebih khusus lagi, nilai objek. Itu membuat objek tidak berubah, mis. e. Anda tidak dapat mengubah propertinya. Pada dasarnya, const adalah var baru;