Rumah >hujung hadapan web >tutorial js >Pengenalan kepada DSL metaprogramming dalam kemahiran JavaScript_javascript

Pengenalan kepada DSL metaprogramming dalam kemahiran JavaScript_javascript

WBOY
WBOYasal
2016-05-16 16:09:262193semak imbas

Apabila saya melihat kod sumber Templat JavaScript, saya mendapati penggunaan yang sangat menarik untuk menjana fungsi, saya fikir, bukankah ini pengaturcaraan meta?

JavaScript Metaprogramming

Salin kod Kod adalah seperti berikut:

Metaprogramming merujuk kepada penulisan jenis atur cara komputer tertentu yang menulis atau memanipulasi atur cara lain (atau diri mereka sendiri) sebagai data mereka, atau menyelesaikan beberapa kerja pada masa jalan yang sepatutnya disiapkan pada masa penyusunan.

JavaScript eval

Salin kod Kod adalah seperti berikut:

Fungsi eval() menilai rentetan dan melaksanakan kod JavaScript di dalamnya.

Ia boleh digunakan seperti berikut:
Salin kod Kod adalah seperti berikut:

eval("x=10;y=20;document.write(x*y)")

Sudah tentu, ini hanya digunakan untuk melaksanakan fungsi tertentu, tetapi produk ini sangat kos efektif dan mudah ralat.
Salin kod Kod adalah seperti berikut:

Fungsi eval harus dielakkan apabila mungkin.

Jadi cara yang lebih baik ialah menggunakan New Function()

Perbezaan besar antara menggunakan New Function() dan eval() ialah eval bukan sekadar fungsi,

Salin kod Kod adalah seperti berikut:

eval() menilai rentetan sebagai ungkapan JavaScript dalam skop pelaksanaan semasa dan boleh mengakses pembolehubah setempat. New Function() menghuraikan rentetan yang disimpan di dalamnya ke dalam objek fungsi yang kemudiannya boleh dipanggil oleh kod JavaScript. Oleh kerana kod berjalan dalam skop yang berasingan, pembolehubah tempatan tidak boleh diakses.

Dengan kata lain, eval() akan mengganggu skop fungsi semasa. .

Fungsi baharu JavaScript()

Pembina Fungsi mencipta objek Fungsi baharu Dalam JavaScript, setiap fungsi (fungsi) sebenarnya ialah objek Fungsi Objek Fungsi yang dijana menggunakan pembina Fungsi dihuraikan apabila fungsi dibuat. Ini kurang cekap berbanding jika anda mengisytiharkan fungsi dan memanggilnya dalam kod anda, kerana fungsi yang diisytiharkan menggunakan penyataan fungsi dihuraikan bersama dengan penyataan lain.

Fungsi Baharu() akan menjadi kurang cekap jika dibandingkan, dan inilah yang boleh kita ramalkan dalam situasi semasa.

Contoh mudah kelihatan seperti ini:

Salin kod Kod adalah seperti berikut:

var add = new Function(['x', 'y'], 'return x y');

new Function() akan menghuraikan rentetan ke dalam fungsi. . Kemudian kita boleh melaksanakannya melalui apply
Salin kod Kod adalah seperti berikut:

Function.apply(null, args)

Dan inilah yang saya lihat dalam Templat JavaScript:
Salin kod Kod adalah seperti berikut:

Fungsi baharu(
         tmpl.arg ',tmpl',
"var _e=tmpl.encode" tmpl.helper ",_s='"
        str.replace(tmpl.regexp, tmpl.func)
"';kembali _s;"
);

Sudah tentu kita mempunyai kaedah lain.
Kenyataan:
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