Rumah > Artikel > hujung hadapan web > Apakah dua kategori objek JavaScript?
Terdapat dua jenis objek dalam JavaScript: 1. Objek Hos, iaitu objek yang disediakan oleh persekitaran hos JavaScript, dan kelakuannya ditentukan sepenuhnya oleh persekitaran hos 2. Objek Terbina dalam, adalah objek yang disediakan oleh bahasa JavaScript.
Persekitaran pengendalian tutorial ini: sistem Windows 7, versi JavaScript 1.8.5, komputer Dell G3.
Dalam JavaScript, objek boleh dibahagikan kepada dua jenis: objek hos dan objek terbina dalam.
Objek Hos: Objek yang disediakan oleh persekitaran hos JavaScript Kelakuannya ditentukan sepenuhnya oleh persekitaran hos.
Objek Terbina dalam: objek yang disediakan oleh bahasa JavaScript
Objek Intrinsik: ditentukan oleh standard, Contoh objek yang dicipta secara automatik kerana masa jalan JavaScript dibuat.
Objek Asli: Objek yang boleh dicipta oleh pengguna melalui pembina terbina dalam seperti Array dan RegExp atau sintaks khas.
Objek Biasa: Objek yang dicipta oleh sintaks {}, pembina Objek atau kelas definisi kata kunci kelas, yang boleh diwarisi oleh prototaip.
Objek hos JavaScript adalah semua jenis pelik, tetapi yang paling biasa di bahagian hadapan sudah pasti hos dalam persekitaran pelayar. Dalam persekitaran pelayar, kita semua tahu bahawa objek global ialah tetingkap, dan terdapat banyak sifat pada tetingkap, seperti dokumen. Malah, sebahagian daripada sifat pada tetingkap objek global datang daripada bahasa JavaScript dan sebahagian daripada persekitaran penyemak imbas. Sifat objek global ditentukan dalam piawaian JavaScript, dan sifat lain objek Tetingkap ditentukan dalam pelbagai piawaian W3C. Objek hos juga dibahagikan kepada dua jenis: inherent dan user-creatable Contohnya, document.createElement boleh mencipta beberapa objek DOM. Hos juga akan menyediakan beberapa pembina Sebagai contoh, kita boleh menggunakan Imej baharu untuk mencipta elemen img
Objek intrinsik ditentukan oleh standard dan dicipta. dengan masa jalan JavaScript yang dibuat secara automatik. Objek intrinsik dicipta sebelum sebarang kod JavaScript dilaksanakan, dan ia sering bertindak seperti perpustakaan asas. "Kelas" yang kami nyatakan tadi sebenarnya adalah sejenis objek yang wujud. Piawaian ECMA memberikan kami senarai objek intrinsik, yang mengandungi 150 objek intrinsik.
Kami memanggil objek dalam JavaScript yang boleh dibuat melalui pembina bahasa itu sendiri dipanggil objek asli. Dalam standard JavaScript, lebih daripada 30 pembina disediakan. Mengikut pemahaman saya dan mengikut senario aplikasi yang berbeza, saya membahagikan objek asli ke dalam kategori berikut.
Melalui pembina ini, kita boleh menggunakan operasi baharu untuk mencipta objek baharu, jadi kita memanggil objek ini objek asli. Hampir semua keupayaan pembina ini tidak boleh dilaksanakan dalam kod JavaScript tulen, dan ia tidak boleh diwarisi menggunakan sintaks kelas/panjang. Kebanyakan objek yang dicipta oleh pembina ini menggunakan medan persendirian, seperti:
Error: [[ErrorData]] Boolean: [[BooleanData]] Number: [[NumberData]] Date: [[DateValue]] RegExp: [[RegExpMatcher]] Symbol: [[SymbolData]] Map: [[MapData]]
Medan ini menjadikan kaedah pewarisan prototaip tidak dapat berfungsi dengan betul, jadi kita boleh berfikir bahawa semua objek asli ini adalah untuk keupayaan tertentu atau performance , dan "objek istimewa" yang direka.
Saya telah memperkenalkan klasifikasi umum objek sebelum ini, terdapat perspektif yang berbeza untuk melihat objek menggunakan objek untuk mensimulasikan fungsi dan pembina. Malah, JavaScript menyimpan mekanisme medan peribadi untuk objek jenis ini dan menetapkan konsep objek fungsi abstrak dan objek pembina.
Takrifan objek fungsi ialah: objek dengan [[panggilan]] medan persendirian, dan takrifan objek pembina ialah: objek dengan medan persendirian [[konstruk]].
JavaScript menggunakan reka bentuk fungsi simulasi objek untuk menggantikan fungsi dalam bahasa pengaturcaraan umum Ia boleh dipanggil dan lulus parameter seperti fungsi dalam bahasa lain. Mana-mana hos yang menyediakan "objek dengan [[panggilan]] medan peribadi" boleh disokong oleh sintaks panggilan fungsi JavaScript.
Kita boleh katakan bahawa mana-mana objek hanya perlu melaksanakan [[panggilan]], ia adalah objek fungsi dan boleh dipanggil sebagai fungsi. Dan jika ia melaksanakan [[konstruk]], ia adalah objek pembina dan boleh dipanggil sebagai pembina.
Bagi pengaturcara yang menyediakan persekitaran masa jalan untuk JavaScript, objek hos dan objek terbina dalam yang kami nyatakan di atas (seperti fungsi Simbol) boleh mensimulasikan fungsi dan pembina selagi medan mematuhi.
Sudah tentu, fungsi yang dicipta oleh pengguna menggunakan kata kunci fungsi mestilah kedua-dua fungsi dan pembina. Walau bagaimanapun, kesan tingkah laku yang mereka tunjukkan tidak sama.
Untuk hos dan objek terbina dalam, pelaksanaan [[panggilan]] (dipanggil sebagai fungsi) dan [[bina]] (dipanggil sebagai pembina) tidak sentiasa konsisten.
对于用户使用 function 语法或者 Function 构造器创建的对象来说,[[call]]和[[construct]]行为总是相似的,它们执行同一段代码。我们看一下示例。
function f(){ return 1; } var v = f(); //把f作为函数调用 var o = new f(); //把f作为构造器调用
这样的规则造成了个有趣的现象,如果我们的构造器返回了一个新的对象,那么 new 创建的新对象就变成了一个构造函数之外完全无法访问的对象,这一定程度上可以实现“私有”。
function cls(){ this.a = 100; return { getValue:() => this.a } } var o = new cls; o.getValue(); //100 //a在外面永远无法访问到
除了上面介绍的对象之外,在固有对象和原生对象中,有一些对象的行为跟正常对象有很大区别。
它们常见的下标运算(就是使用中括号或者点来做属性访问)或者设置原型跟普通对象不同,这里我简单总结一下。
Array:Array 的 length 属性根据最大的下标自动发生变化。
Object.prototype:作为所有正常对象的默认原型,不能再给它设置原型了。
String:为了支持下标运算,String 的正整数属性访问会去字符串里查找。
Arguments:arguments 的非负整数型下标属性跟对应的变量联动。
模块的 namespace 对象:特殊的地方非常多,跟一般对象完全不一样,尽量只用于 import 吧。
类型数组和数组缓冲区:跟内存块相关联,下标运算比较特殊。
bind 后的 function:跟原来的函数相关联。
【相关推荐:javascript视频教程】
Atas ialah kandungan terperinci Apakah dua kategori objek JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!