Konsep Utama:
Memahami Immutability:
mutabiliti, hanya meletakkan, bermakna sesuatu adalah tertakluk kepada perubahan. Dalam pengaturcaraan, objek yang boleh berubah membolehkan perubahan kepada keadaan mereka. Ketidakhadiran adalah sebaliknya: nilai yang tidak berubah kekal tetap selepas penciptaan. Banyak nilai biasa tidak berubah. Contohnya:
const statement = "I am an immutable value"; const otherStr = statement.slice(8, 17);
tetap tidak berubah. Kaedah rentetan membuat rentetan baru; Mereka tidak mengubah suai asal. Ini kerana rentetan tidak berubah. Nombor berkongsi ciri ini. otherStr
statement
rentetan dan nombor terbina dalam JavaScript tidak berubah. Walau bagaimanapun, tatasusunan boleh berubah:
let arr = []; let v2 = arr.push(2); // arr is modified; v2 holds the new length
ImmutableArray
const arr = new ImmutableArray([1, 2, 3, 4]); const v2 = arr.push(5); arr.toArray(); // [1, 2, 3, 4] v2.toArray(); // [1, 2, 3, 4, 5]
ImmutableMap
const person = new ImmutableMap({name: "Chris", age: 32}); const olderPerson = person.set("age", 33); person.toObject(); // {name: "Chris", age: 32} olderPerson.toObject(); // {name: "Chris", age: 33}
Oleh kerana JavaScript tidak mempunyai struktur yang tidak berubah asli, kami menggunakan perpustakaan seperti tidak dapat ditemui. Mari kita pertimbangkan contoh permainan yang lebih baik. Papan adalah peta yang tidak berubah, dengan
sebagai senarai peta yang tidak berubah (setiap jubin). Penggunaan Inisialisasi 'S tiles
Fungsi: immutable.js
fromJS
function createGame(options) { return Immutable.fromJS({ cols: options.cols, rows: options.rows, tiles: initTiles(options.rows, options.cols, options.mines) }); }
revealTile
function revealTile(game, tile) { game.tiles[tile].isRevealed = true; //Direct mutation }
setIn
function revealTile(game, tile) { return game.setIn(['tiles', tile, 'isRevealed'], true); }
: setIn
getIn
function revealTile(game, tile) { return game.getIn(['tiles', tile]) ? game.setIn(['tiles', tile, 'isRevealed'], true) : game; }
Semasa membuat objek baru mungkin kelihatan tidak cekap, "perkongsian struktur" meminimumkan overhead ingatan. Impak prestasi sering lebih besar daripada manfaat kebolehubahan. Penjejakan perubahan yang lebih baik: Immutability memudahkan perubahan penjejakan dalam kerangka UI. Membandingkan rujukan ( Kesimpulan:
a === b
Atas ialah kandungan terperinci Ketidakhadiran dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!