Apakah yang terakhir hanya merujuk ke objek fungsi nonprima yang dibuat oleh konstruktor kustom (misalnya, var bird1 = new Bird ();)?
javascript
ppecher
sumber
sumber
new Image()
- adalah objek host, misalnya.:)
Jawaban:
Kedua istilah tersebut didefinisikan dalam spesifikasi ECMAScript:
Sumber: http://es5.github.com/#x4.3.6
Sumber: http://es5.github.com/#x4.3.8
Beberapa contoh:
Benda asli:
Object
(konstruktor),Date
,Math
,parseInt
,eval
, metode string sepertiindexOf
danreplace
, metode array, ...Tuan rumah benda (dengan asumsi lingkungan browser):
window
,document
,location
,history
,XMLHttpRequest
,setTimeout
,getElementsByTagName
,querySelectorAll
, ...sumber
host object
dijelaskan dalam jawaban ini .'Object'
, atau disajikan melaluiObject.prototype.toString
sebagai'[object Object]'
.Bird
adalah fungsi yang ditentukan pengguna, semantiknya "sepenuhnya ditentukan" oleh spesifikasi ES (cara kerja objek fungsi, caranew
membuatnya , dieksekusi, digunakan dengan operator, dll, dll., Dll.) objek asli ... Saya mungkin memberikan jawaban ...Lebih jelasnya jika kita membedakan tiga macam objek:
Built-in objek :
String
,Math
,RegExp
,Object
,Function
dll - inti ditentukan sebelumnya benda selalu tersedia di JavaScript. Didefinisikan dalam spesifikasi ECMAScript.Objek host : objek seperti
window
,,XmlHttpRequest
simpul DOM dan sebagainya, yang disediakan oleh lingkungan browser. Mereka berbeda dari objek built-in karena tidak semua lingkungan memiliki objek host yang sama. Jika JavaScript berjalan di luar browser, misalnya sebagai bahasa skrip sisi server seperti di Node.js, objek host yang berbeda akan tersedia.Objek pengguna : objek yang ditentukan dalam kode JavaScript. Jadi 'Bird' dalam contoh Anda akan menjadi objek pengguna.
Spesifikasi JavaScript mengelompokkan objek bawaan dan objek pengguna sebagai objek asli . Ini adalah penggunaan istilah "asli" yang tidak ortodoks, karena objek pengguna jelas-jelas diimplementasikan dalam JavaScript sementara built-in kemungkinan besar diimplementasikan dalam bahasa yang berbeda di bawah tenda, seperti halnya objek host. Namun dari perspektif spesifikasi JavaScript, baik bawaan maupun objek pengguna adalah bawaan JavaScript karena keduanya ditentukan dalam spesifikasi JavaScript, sedangkan objek host tidak.
sumber
Berikut pemahaman saya tentang speknya.
Ini:
var bird = new Bird();
... menghasilkan Objek asli yang kebetulan dibuat menggunakan
new
operator.Objek asli memiliki properti [[Class]] internal dari salah satu dari berikut ini:
Untuk Anda
bird1
itu akan menjadi:Sama seperti jika Anda membuat fungsi:
function my_func() { // ... }
...
my_func
tidak ditentukan dalam ECMAScript, tetapi masih merupakan objek asli dengan [[Class]] internal:Objek host adalah objek yang disediakan oleh lingkungan untuk melayani tujuan tertentu ke lingkungan yang tidak ditentukan dalam spesifikasi.
Sebagai contoh:
var divs = document.getElementsByTagName('div')
Objek yang direferensikan
divs
adalah NodeList , yang diintegrasikan ke dalam lingkungan sedemikian rupa sehingga terasa seperti objek JavaScript biasa, namun tidak ditentukan di mana pun oleh spesifikasi.Properti [[Class]] internalnya adalah:
Ini memberikan desainer implementasi beberapa fleksibilitas dalam menyesuaikan implementasi dengan kebutuhan spesifik lingkungan.
Ada persyaratan objek host yang ditentukan di seluruh spesifikasi.
sumber
bird
danBird
merupakan objek asli , mereka adalah fungsi yang ditentukan pengguna (Bird
), dan objek (bird
) yang dibuat dengan menggunakan fungsi sebagai konstruktor, semua semantik ini ditentukan pada spesifikasi. Tentang objek host, jangan terlalu mengandalkan[[Class]]
properti internal, misalnyawindow.alert
memiliki"Function"
nilai[[Class]]
propertinya hampir semua implementasi, di IE yang dimilikinya"Object"
, dan itu masih objek host ...[[Class]]
. Alih-alih hanya menggunakannya sebagai kilasan nyata tentang bagaimana pelaksana telah menafsirkan berbagai jenis objek. Jadiwindow.alert
memiliki internal[[Class]]
dari"Function"
tampaknya akan menjadi pelanggaran ES 5?divs/NodeList
,, saya mendapatkanobject
. Saya rasa saya belum mengerti ini, tapi bukankah itu membuatnya menjadi objek asli?window
acara semua objek tuan rumahTidak dapat melihat jawaban yang meyakinkan untuk pertanyaan apakah objek
var bird1 = new Bird();
asli atau host. Dengan asumsi Bird adalah fungsi yang ditentukan pengguna, objek non-built-in asli akan dibuat sesuai dengan http://es5.github.io/#x13.2 oleh implementasi javascript. Sebaliknya, bawaan bawaanobjek akan hadir sejak awal program javascript (seperti Objek dan banyak lainnya). Perbedaan antara objek asli dan objek host adalah bahwa objek pertama dibuat oleh implementasi javascript dan objek host disediakan oleh lingkungan host. Akibatnya, properti [[class]] objek host internal dapat berbeda dari yang digunakan oleh objek bawaan (yaitu "Argumen", "Array", "Boolean", "Tanggal", "Kesalahan", "Fungsi", " JSON "," Matematika "," Angka "," Objek "," RegExp ", dan" String ").Juga, perlu diperhatikan bahwa ECMA6 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf tidak lagi menggunakan terminologi native dan objek host. Sebaliknya, ia mendefinisikan tipe objek di bawah ini, dengan penjelasan yang lebih jelas tentang perilaku yang diinginkan.
sumber
Selain jawaban lain tentang Objek Host.
Objek host dikhususkan untuk lingkungan. Jadi selanjutnya objek host browser, ada juga objek khusus untuk nodejs.
Demi contoh, pertama-tama mulai dengan objek Standar seperti yang didefinisikan dalam Javascript. Kemudian objek umum untuk Browser / DOM. Node memiliki Objeknya sendiri.
Contoh objek bawaan Javascript standar :
Contoh Model Objek Dokumen Objek Host :
Objek Host di Node.js :
sumber
Mempertimbangkan tiga objek: Host, Native, Custom.
Objek Host dibuat oleh lingkungan dan khusus lingkungan. Lingkungan yang paling terkenal adalah browser web tetapi bisa menjadi platform lain. Objek host yang dibuat di browser web dapat berupa objek jendela atau dokumen. Biasanya browser menggunakan API untuk membuat Objek Host untuk mencerminkan Model Objek Dokumen ke dalam JavaScript. (Webbrowser memiliki Mesin JavaScript berbeda yang melakukan ini) Objek host dibuat secara otomatis saat halaman dirender di browser.
Objek Asli dibuat oleh pengembang menggunakan kelas JavaScript yang telah ditentukan sebelumnya. Objek Asli ada dalam skrip tertulis Anda.
Kemudian, Objek Kustom dibuat oleh pengembang dari kelas kustom (tidak ditentukan sebelumnya, atau sebagian ditentukan sebelumnya).
sumber
Objek asli adalah objek yang mengikuti spesifikasi, yaitu "objek standar".
Objek host adalah objek yang disediakan browser (atau lingkungan runtime lain seperti Node).
Sebagian besar objek host adalah objek native, dan setiap kali Anda membuat instance sesuatu menggunakan
new
, Anda dapat 99,99% yakin bahwa itu adalah objek native, kecuali jika Anda mengotak-atik objek host yang aneh.Gagasan ini diperkenalkan karena adanya objek yang sangat aneh di IE (dan browser lama lainnya?) . Sebagai contoh:
typeof document.all == "undefined"; // true document.all.myElementId; // object
Saat melihat ini, semua orang akan setuju bahwa
document.all
ini jelas "non-standar", dan dengan demikian merupakan objek host non-native .Jadi mengapa tidak memanggil objek asli objek standar di tempat pertama? Sederhana: bagaimanapun, dokumen Standard (!) Berbicara tentang objek non-native juga, dan menyebutnya non-standar akan menyebabkan paradoks.
Lagi:
sumber
Ini mungkin berlebihan, tetapi untuk kesederhanaan, objek asli adalah objek yang ada dan dapat digunakan di lingkungan apa pun yang mengimplementasikan mesin yang sesuai dengan ECMAScript. Ini biasanya (tetapi tidak selalu) browser.
Jadi, Internet Explorer atau Google Chrome Anda, tidak membuat objek String tersedia untuk Anda, misalnya. Alasan Anda dapat menggunakan objek String adalah karena itu "asli" (bawaan) untuk bahasa JavaScript itu sendiri.
Namun, jika Anda ingin membuat jendela pop-up, Anda harus menggunakan objek jendela. Objek jendela disediakan oleh perangkat lunak browser itu sendiri, jadi ini bukan asli JavaScript, tetapi merupakan bagian dari "Model Objek Browser" atau BOM.
sumber