


Pemahaman mendalam tentang siri JavaScript (25): Penjelasan terperinci tentang corak tunggal corak reka bentuk_Pengetahuan asas
Pengenalan
Bermula dari bab ini, kami akan memperkenalkan secara beransur-ansur pelaksanaan pelbagai corak reka bentuk yang digunakan dalam JavaScript Di sini saya tidak akan memperkenalkan terlalu banyak tentang teori corak itu sendiri, tetapi hanya akan menumpukan pada pelaksanaan. OK, ia telah dimulakan secara rasmi.
Di mata jurutera pembangunan tradisional, satu-satu adalah untuk memastikan bahawa kelas hanya mempunyai satu contoh , cipta dan kembalikan Ini memastikan kelas A hanya mempunyai satu objek contoh. Dalam JavaScript, singleton bertindak sebagai penyedia ruang nama, menyediakan titik akses unik kepada objek daripada ruang nama global.
Teks
Dalam JavaScript, terdapat banyak cara untuk melaksanakan singleton Salah satu cara paling mudah ialah menggunakan literal objek, yang boleh mengandungi sejumlah besar sifat dan kaedah:
var mySingleton = {
Harta1: "sesuatu",
Harta2: "sesuatu yang lain",
Kaedah1: fungsi () {
console.log('hello world');
}
};
Jika anda kemudian memanjangkan objek ini, anda boleh menambah ahli dan kaedah peribadi anda sendiri, dan kemudian menggunakan penutupan untuk merangkum pembolehubah dan pengisytiharan fungsi ini di dalamnya. Dedahkan hanya ahli awam dan kaedah yang anda ingin dedahkan Kod sampel adalah seperti berikut:
var mySingleton = fungsi () {
/* Isytiharkan pembolehubah dan kaedah persendirian di sini */
var privateVariable = 'sesuatu yang peribadi';
Function showPrivate() {
console.log(privateVariable);
}
/* Pembolehubah dan kaedah awam (pembolehubah dan kaedah peribadi boleh diakses) */
Kembali {
publicMethod: function () {
showPrivate();
},
publicVar: 'orang ramai boleh melihat ini!'
};
};
var tunggal = mySingleton();
single.publicMethod(); // Output 'sesuatu yang peribadi'
console.log(single.publicVar); // Output 'orang ramai boleh melihat ini!'
Kod di atas sangat bagus, tetapi bagaimana jika kita mahu memulakannya hanya apabila ia digunakan? Untuk menjimatkan sumber, kita boleh memulakan kod ini dalam pembina lain, seperti berikut:
var Singleton = (fungsi () {
var instantiated;
Fungsi init() {
/*Tentukan kod tunggal di sini*/
kembali {
publicMethod: function () {
console.log('hello world');
},
publicProperty: 'test'
};
}
kembali {
getInstance: function () {
jika (!instantiated) {
instantiated = init();
}
pulangan dibuat seketika;
}
};
})();
/*Panggil kaedah awam untuk mendapatkan contoh:*/
Singleton.getInstance().publicMethod();
Kami kini tahu cara melaksanakan singleton, tetapi dalam senario apakah singleton terbaik digunakan? Sebenarnya, singleton biasanya digunakan untuk menyelaraskan pelbagai mod komunikasi antara sistem Kod berikut adalah amalan terbaik untuk singleton:
var SingletonTester = (fungsi () {
//Parameter: satu set parameter yang dihantar ke singleton
Fungsi Singleton(args) {
//Tetapkan pembolehubah args kepada parameter yang diterima atau kosongkan (jika tidak disediakan)
var args = args || {};
//Tetapkan parameter nama
This.name = 'SingletonTester';
//Tetapkan nilai pointX
This.pointX = args.pointX || 6; //Dapatkan daripada parameter yang diterima, atau tetapkan kepada nilai lalai
//Tetapkan nilai pointY
This.pointY = args.pointY || 10;
}
//Bekas contoh
contoh var;
var _statik = {
nama: 'SingletonTester',
//Kaedah untuk mendapatkan contoh
//Kembalikan instance Singleton
getInstance: function (args) {
Jika (contoh === tidak ditentukan) {
contoh = Singleton(args) baharu;
}
contoh pulangan;
}
};
Kembalikan _statik;
})();
var singletonTest = SingletonTester.getInstance({ pointX: 5 });
console.log(singletonTest.pointX); // Output 5
Kaedah pelaksanaan lain
Kaedah 1:
fungsi Universe() {
// Tentukan sama ada tika wujud
Jika (jenis Universe.instance === 'objek') {
kembalikan Universe.instance;
}
// Kandungan lain
This.start_time = 0;
This.bang = "Besar";
// Cache
Universe.instance = ini;
// Mengembalikan ini secara tersirat
}
//Ujian
var uni = new Universe();
var uni2 = Universe baharu();
console.log(uni === uni2); // true
Kaedah 2:
fungsi Universe() {
// contoh cache
var instance = ini;
// Kandungan lain
This.start_time = 0;
This.bang = "Besar";
// Gantikan pembina
Alam Semesta = fungsi () {
contoh pulangan;
};
}
//Ujian
var uni = new Universe();
var uni2 = Universe baharu();
uni.bang = "123";
console.log(uni === uni2); // true
console.log(uni2.bang); // 123
Kaedah 3:
fungsi Universe() {
// Contoh cache
contoh var;
// Fungsi pembina semula
Universe = fungsi Universe() {
contoh pulangan;
};
// Sifat prototaip pasca pemprosesan
Universe.prototype = ini;
// Contoh
Instance = new Universe();
// Tetapkan semula penunjuk pembina
Instance.constructor = Alam Semesta;
// Fungsi lain
Instance.start_time = 0;
Instance.bang = "Besar";
kembali contoh;
}
// Ujian
var uni = new Universe();
var uni2 = Universe baharu();
console.log(uni === uni2); // true
//Tambah atribut prototaip
Universe.prototype.nothing = benar;
var uni = new Universe();
Universe.prototype.everything = benar;
var uni2 = new Universe();
console.log(uni.nothing); // benar
console.log(uni2.nothing); // benar
console.log(uni.everything); // benar
console.log(uni2.everything); // benar
console.log(uni.constructor === Universe); // true
Kaedah 4:
var Universe;
(fungsi () {
var contoh;
Alam Semesta = fungsi Alam Semesta() {
jika (contoh) {
contoh pulangan;
}
contoh = ini;
// Kandungan lain
This.start_time = 0;
This.bang = "Besar";
};
} ());
//Kod ujian
var a = new Universe();
var b = Alam Semesta baharu();
makluman(a === b); // benar
a.bang = "123";
makluman(b.bang); // 123

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa