Rumah > Artikel > hujung hadapan web > Pengenalan kepada ciri boleh tulis Javascript_kemahiran javascript
Apabila bercakap tentang teg ciri dalam js, saya sentiasa berasa sedikit pelik Jadi mengapa kita bercakap tentang atribut ini? Kita semua tahu bahawa objek tetingkap sebenarnya
Satu kejadian tetingkap penyemak imbas Memandangkan ia adalah contoh, maka tika ini harus mempunyai "sifat" dan "kaedah", seperti berikut:
Apabila kami biasanya menggunakan fungsi, kami akan menentukan beberapa atribut, seperti nama, umur, dsb., dan kami juga boleh melakukan operasi pemadaman, set dan kemas kini padanya.
Kemudian soalan seterusnya datang Memandangkan nama objek orang saya boleh diubah suai secara dinamik, mengikut prinsip ini, saya juga sepatutnya boleh mengubah suai nilai yang tidak ditentukan di bawah tetingkap, dan kemudian saya sangat berminat untuk melihatnya. .
Hasilnya masih boleh diramalkan Saya tidak berjaya mengubah suai nilai yang tidak ditentukan, jadi mengapa ini berlaku? Ia tidak masuk akal. Ia bukan jenis pembungkusan yang disebutkan dalam artikel sebelumnya, tetapi kita harus menghormati hasilnya. Ini bermakna lapisan bawah js mesti telah melakukan sesuatu untuk membawa kepada hasil seperti itu of js uses Writable= secara lalai Tanda palsu menjadikan atribut yang tidak ditentukan tidak boleh ditulis.
1: Ciri [Boleh Ditulis]
Apabila bercakap tentang sama ada sesuatu harta boleh ditulis, anda mungkin memikirkan aksesor dapatkan/set dalam C#, atau kata kunci baca sahaja Anda pasti akan berminat dengan cara saya harus mencapai operasi baca sahaja harta tersebut. Dalam js anda hanya perlu menggunakan kaedah defineProperty.
Tiga perkara menarik boleh dilihat daripada contoh di atas:
<1>: Saya menggunakan kaedah defineProperty untuk menukar person.name menjadi medan baca sahaja Seseorang akan berkata, ini jelas satu kaedah, bagaimana ia boleh menjadi ciri pada fikiran saya, ciri itu ialah
mod, jadi ini adalah perbezaan JS.
<2>: Saya melihat bukan sahaja boleh ditulis tetapi juga boleh dikonfigurasikan dalam kaedah ini. Sebenarnya, ini ialah konfigurasi asas, yang memberitahu enjin js sama ada ia boleh memadam dan mengemas kini atribut Apabila saya menetapkan boleh dikonfigurasikan kepada palsu, anda tidak boleh memadam p.Name, kerana ini akan menjadi operasi yang tidak sah.
Selepas membaca ini, saya rasa anda harus faham mengapa undiffed tidak boleh memadam atau mengemas kini. Mereka semua diperbuat daripada tanda pelik Tidakkah anda fikir ia menarik?
<3>: Soalan seterusnya yang patut difikirkan ialah bagaimana enjin js melakukannya. Terdapat juga Atrribute dalam C#, dan Atribute ini akan direkodkan dalam metadata selepas disusun oleh pengkompil, dan kemudian anda boleh Feel. bebas untuk menggunakan refleksi untuk mendapatkan sebarang nilai dalam Atribute anda, seperti kelas SerializableFormat cara membaca kelas secara reflektif, medan yang boleh disiri dan yang tidak, anda perlu menggunakan tanda NonSerialized.
Anda boleh melihat daripada gambar bahawa ciri Nama tidak bersiri telah direkodkan dalam IL Kami tahu bahawa tiada pantulan dalam js, jadi penembusan secara semula jadi dalam kaedah defineProperty, tetapi malangnya, kami tidak dapat melihat asasnya. kod sumber kaedah ini, jadi saya tidak tahu apa yang dilakukannya pada medan Nama untuk menyebabkannya menjadi tidak boleh ditulis secara dinamik. Saya hanya boleh meneka kemungkinan kelakuan enjin js berdasarkan pemahaman.