พารามิเตอร์:
(1) OBJ
ที่จำเป็น. ชื่อของตัวแปรที่กำหนดวัตถุวัตถุ
(2) ค่า
ไม่จำเป็น. ชนิดข้อมูลดั้งเดิมของ JavaScript (หมายเลขบูลีนหรือสตริง) หากค่าเป็นวัตถุวัตถุที่ส่งคืนจะไม่ได้รับการแก้ไข หากค่าเป็นโมฆะ "ไม่ได้กำหนด" หรือ "ไม่ได้ให้" วัตถุที่ไม่มีเนื้อหาจะถูกสร้างขึ้น
วิธีการของวัตถุวัตถุ
เมื่อวัตถุถูกใช้เป็นตัวสร้างมันสามารถยอมรับพารามิเตอร์ หากพารามิเตอร์เป็นวัตถุมันจะส่งคืนวัตถุโดยตรง หากเป็นค่าของประเภทดั้งเดิมมันจะส่งคืนวัตถุ wrapper ที่สอดคล้องกับค่า การใช้สิ่งนี้คุณสามารถเขียนฟังก์ชั่นที่กำหนดว่าตัวแปรเป็นวัตถุหรือไม่
ฟังก์ชัน isObject (value) {return value === Object (value);}มีสองวิธีในการปรับใช้วิธีการบนวัตถุวัตถุ
ปรับใช้ในวัตถุวัตถุเอง
ปรับใช้ใน Object.prototype Object
วิธีการ Object.keys นั้นคล้ายกับวิธีการ Object.GetOwnPropertyNames มากและใช้โดยทั่วไปในการสำรวจคุณสมบัติของวัตถุ พารามิเตอร์ของพวกเขาทั้งหมดเป็นวัตถุและพวกเขาทั้งหมดกลับมาอาเรย์และสมาชิกของอาร์เรย์เป็นชื่อแอตทริบิวต์ทั้งหมดของวัตถุเอง (แทนที่จะสืบทอด) ความแตกต่างระหว่างทั้งสองคืออดีตส่งคืนคุณลักษณะที่ระบุได้เท่านั้นในขณะที่หลังยังส่งคืนชื่อแอตทริบิวต์ที่ไม่สามารถใช้งานได้ เนื่องจากอาร์เรย์มีความยาวแอตทริบิวต์ที่ไม่สามารถใช้งานได้อาร์เรย์มักจะถูกสำรวจด้วย Object.keys
JavaScript ไม่ได้ให้วิธีการคำนวณจำนวนคุณสมบัติของวัตถุซึ่งสามารถรับได้ผ่าน Object.keys (O) .length และ Object.getownpropertyNames (O). ความยาว
วิธีการ Object.observe ใช้เพื่อสังเกตการเปลี่ยนแปลงในคุณสมบัติของวัตถุ
วิธีการที่เกี่ยวข้องกับห่วงโซ่ต้นแบบ:
Object.create (): สร้างวัตถุใหม่และต้นแบบของวัตถุ
Object.getPrototypeof (): รับวัตถุต้นแบบของวัตถุ
วิธีการของวัตถุอินสแตนซ์วัตถุ
Object.prototype.valueof (): ฟังก์ชันของวิธีการของวิธีการคือการส่งคืนค่าของวัตถุและโดยค่าเริ่มต้นวัตถุเองจะถูกส่งคืน วัตถุประสงค์หลักของวิธีนี้คือวิธีนี้จะถูกเรียกโดยค่าเริ่มต้นเมื่อ JavaScript แปลงประเภทโดยอัตโนมัติ
Object.prototype.toString (): ฟังก์ชั่นของวิธีการ toString คือการส่งคืนรูปแบบสตริงของวัตถุ เมื่อวัตถุถูกใช้สำหรับการเพิ่มสตริงวิธี toString จะถูกเรียกโดยอัตโนมัติ
การใช้วิธีการโทรคุณสามารถโทรหา Object.prototype.toString Method บนค่าใด ๆ เพื่อกำหนดประเภทของค่านี้ ค่าส่งคืนของวิธีการ toString ของชนิดข้อมูลที่แตกต่างกันมีดังนี้:
ค่า: return [หมายเลขวัตถุ]
String: return [String Object]
บูลีน: ส่งคืน [วัตถุบูลีน]
ไม่ได้กำหนด: return [Object undefined]
NULL: return [Object Null]
วัตถุ: ส่งคืน "[object" + ชื่อของตัวสร้าง + "]"
Object.prototype.toString.call (2) // "[หมายเลขวัตถุ]" Object.prototype.toString.call ('') // "[สตริงวัตถุ]"การใช้คุณสมบัตินี้คุณสามารถเขียนฟังก์ชั่นการตัดสินประเภทที่แม่นยำกว่าตัวดำเนินการประเภท
var type = function (o) {var s = object.prototype.toString.call (o); return s.match (// [object (.*?)/]/) [1] .toLowerCase ();}; ประเภท ({}); // "วัตถุ" ประเภท ([]); // ประเภท "อาร์เรย์" (5); // "ตัวเลข"จากฟังก์ชั่นประเภทด้านบนคุณยังสามารถเพิ่มวิธีการที่กำหนดข้อมูลบางประเภทโดยเฉพาะ
['null', 'undefined', 'Object', 'Array', 'String', 'Number', 'Boolean', 'Function', 'Regexp', 'Element', 'Nan', 'Infinite']. foreach (t.tolars (t) {type };}); type.isobject ({}); // Truetype.isnumber (Nan); // falsetype.iselement (document.createelement ('div')); // จริงโมเดลแอตทริบิวต์ของวัตถุ
ใน JavaScript แต่ละแอตทริบิวต์มีวัตถุแอตทริบิวต์ที่สอดคล้องกันซึ่งบันทึกข้อมูลเมตาบางส่วนของแอตทริบิวต์ ใช้เมธอด Object.GetOwnPropertyDescriptor เพื่ออ่านแอตทริบิวต์วัตถุของแอตทริบิวต์ P ของวัตถุ O วัตถุแอตทริบิวต์มีข้อมูลเมตาต่อไปนี้:
ค่า: แสดงถึงค่าของคุณสมบัตินี้ซึ่งไม่ได้กำหนดโดยค่าเริ่มต้น (ตราบใดที่หนึ่งในการเขียนและกำหนดค่าได้นั้นเป็นจริงสามารถเปลี่ยนแปลงได้)
เขียนได้: ระบุว่าค่าของคุณสมบัตินี้สามารถเปลี่ยนแปลงได้ค่าเริ่มต้นเป็นจริง
enumerable: ระบุว่าแอตทริบิวต์นั้นมีอยู่หรือไม่ค่าเริ่มต้นเป็นจริงนั่นคือแอตทริบิวต์จะปรากฏในการดำเนินการเช่นสำหรับ ... ในและ Object.keys () โดยทั่วไปคุณสมบัติของระบบดั้งเดิม (เช่นคุณสมบัติที่ไม่ได้กำหนดผู้ใช้) จะไม่สามารถระบุได้
ระบุ "การกำหนดค่า", ค่าเริ่มต้นเป็นจริง หากตั้งค่าเป็นเท็จหมายความว่าแอตทริบิวต์ไม่สามารถลบได้และวัตถุแอตทริบิวต์จะต้องไม่เปลี่ยนแปลง (ยกเว้นแอตทริบิวต์ค่าหากเขียนได้จริงค่ายังคงสามารถเปลี่ยนแปลงได้) นั่นคือแอตทริบิวต์ที่กำหนดค่าได้จะควบคุมความสามารถในการเขียนของวัตถุแอตทริบิวต์
ฟังก์ชันค่า (getter) แสดงคุณสมบัตินี้ค่าเริ่มต้นเป็น undefined
ฟังก์ชั่นการจัดเก็บค่า (setter) แสดงคุณสมบัตินี้ค่าเริ่มต้นเป็น undefined
var o = {p: 'a'}; object.getownpropertydescriptor (o, 'p'); // object {// value: "a", // writable: จริง, // enumerable: true, // กำหนดค่าได้: true //}วิธีการ Object.defineProperty ช่วยให้คุณสามารถกำหนดหรือแก้ไขแอตทริบิวต์โดยการกำหนดวัตถุแอตทริบิวต์จากนั้นส่งคืนวัตถุที่แก้ไข รูปแบบมีดังนี้:
Object.defineProperty (Object, PropertyName, AttributesObject)
Method Object.defineProperty ยอมรับพารามิเตอร์สามตัวแรกคือวัตถุที่คุณสมบัติอยู่ที่สองคือชื่อคุณสมบัติ (ควรเป็นสตริง) และที่สามคือวัตถุคำอธิบายคุณสมบัติ ด้วยวิธีนี้ค่าเริ่มต้นของคุณสมบัติการเขียนที่กำหนดค่าได้และคุณสมบัติที่ระบุได้ของวัตถุคุณสมบัติเป็นเท็จ
Object.defineProperty (o, "p", {value: "bar"}); object.getownpropertydescriptor (o, 'p'); // object {// value: "bar", // writable: false, // enumerable: falseหากมีการกำหนดหรือแก้ไขคุณสมบัติหลายอย่างในครั้งเดียวคุณสามารถใช้วิธีการ defineproperties ควรสังเกตว่าเมื่อมีการกำหนดฟังก์ชั่นค่า (หรือชุดฟังก์ชั่นการจัดเก็บค่า) แล้วจะไม่สามารถตั้งค่าการเขียนเป็นจริงหรือแอตทริบิวต์ค่าถูกกำหนดในเวลาเดียวกันมิฉะนั้นจะมีการรายงานข้อผิดพลาด
var o = object.defineProperties ({}, {p1: {ค่า: 123, enumerable: true}, p2: {value: "abc", enumerable: true}, p3: {get: {) {ส่งคืนสิ่งนี้ p1 + this.p2}, enumerable: จริงEnumerable สามารถใช้ในการตั้งค่าคุณสมบัติ "ความลับ" หากการระบุคุณสมบัติเป็นเท็จสำหรับ .. ในลูปวิธีการ Object.keys และวิธี JSON.Stringify จะไม่ได้รับคุณสมบัติ แต่สามารถรับค่าได้โดยตรงผ่าน O.XX
ความแตกต่างระหว่างวิธีการสำหรับ ... ในลูปและวิธีการที่คีย์คืออดีตรวมถึงคุณสมบัติของวัตถุที่สืบทอดมาจากวัตถุต้นแบบในขณะที่หลังรวมคุณสมบัติของวัตถุเท่านั้น หากคุณต้องการรับคุณสมบัติทั้งหมดของวัตถุเองโดยไม่คำนึงถึงคุณค่าของวิธีการที่ระบุได้คุณสามารถใช้วิธีการ Object.TownPropertyNames
การกำหนดค่ากำหนดว่าสามารถลบตัวแปรได้หรือไม่ เมื่อตัวแปรถูกประกาศโดยใช้คำสั่ง VAR ตัวแปรที่กำหนดค่าได้นั้นเป็นเท็จและเมื่อมีการประกาศตัวแปรโดยใช้คำสั่ง VAR (หรือตัวแปรจะถูกประกาศโดยใช้การกำหนดแอตทริบิวต์) การกำหนดค่าของตัวแปรนั้นเป็นจริง ซึ่งหมายความว่าการลบสามารถลบคุณสมบัติของวัตถุเท่านั้น
var a1 = 1; // กำหนดค่าได้: falsesea2 = 1; // กำหนดค่าได้: true (เทียบเท่ากับ this.a2 = 1)
นอกเหนือจากคำจำกัดความโดยตรงคุณสมบัติยังสามารถกำหนดได้โดยใช้ฟังก์ชั่น accessor ในหมู่พวกเขาฟังก์ชั่นการจัดเก็บค่าเรียกว่า setter ซึ่งใช้คำสั่ง SET; ฟังก์ชั่นการได้มาซึ่งเรียกว่า Getter ซึ่งใช้คำสั่ง GET การใช้ฟังก์ชั่นการเข้าถึงการเชื่อมโยงสองทางระหว่างวัตถุข้อมูลและวัตถุ DOM สามารถรับรู้ได้
Object.defineProperty (ผู้ใช้, 'ชื่อ', {get: function () {return document.getElementById ("foo"). value}, set: function (newValue) {document.getElementById ("foo") ค่า = newValue;}ควบคุมสถานะวัตถุ
JavaScript มีวิธีการสามวิธีในการควบคุมสถานะการอ่านและเขียนของวัตถุอย่างแม่นยำและป้องกันไม่ให้วัตถุเปลี่ยน ชั้นที่อ่อนแอที่สุดของการป้องกันคือ preventextensions ตามด้วยซีลการแช่แข็งที่แข็งแกร่งที่สุด
เมธอด Object.PreventExtensions สามารถทำให้วัตถุไม่สามารถเพิ่มคุณสมบัติใหม่ได้ แต่สามารถใช้คำสั่งลบเพื่อลบคุณสมบัติที่มีอยู่ สามารถใช้วิธีการ Object.isextensible เพื่อตรวจสอบว่าสามารถเพิ่มวัตถุได้หรือไม่
วิธีการ Object.SEAL ทำให้เป็นไปไม่ได้ที่วัตถุจะเพิ่มคุณสมบัติใหม่หรือลบคุณสมบัติเก่า Object.Seal ยังตั้งค่าแอตทริบิวต์ที่กำหนดค่าได้ของแอตทริบิวต์วัตถุของแอตทริบิวต์ที่มีอยู่เป็นเท็จเพื่อให้วัตถุแอตทริบิวต์ไม่สามารถเปลี่ยนแปลงได้อีกต่อไป method.sisealed วิธีการใช้เพื่อตรวจสอบว่าวัตถุใช้วิธีการ Object.SEAL หรือไม่
วิธีการ FREEZE สามารถทำให้วัตถุไม่สามารถเพิ่มแอตทริบิวต์ใหม่ลบแอตทริบิวต์เก่าและเปลี่ยนค่าของแอตทริบิวต์ทำให้วัตถุนี้เป็นค่าคงที่ วิธีการ Object.isfrozen ใช้เพื่อตรวจสอบว่าวัตถุใช้วิธีการ freeze () หรือไม่
ใช้วิธีการข้างต้นเพื่อล็อคความสามารถในการเขียนของวัตถุ แต่คุณยังสามารถเพิ่มคุณสมบัติลงไปได้โดยการเปลี่ยนวัตถุต้นแบบของวัตถุ
var o = วัตถุใหม่ (); object.preventextensions (o); var proto = object.getPrototypeof (o); proto.t = "hello"; ot // hello
ทางออกหนึ่งคือการแช่แข็งต้นแบบเช่นกัน
var o = object.seal (object.create (object.freeze ({x: 1}), {y: {value: 2, เขียนได้: true}})); object.getPrototypeof (o) .t = "hello";PS:
วัตถุวัตถุรวมอยู่ในวัตถุ JavaScript อื่น ๆ ทั้งหมด วิธีการและคุณสมบัติทั้งหมดมีให้สำหรับวัตถุอื่น ๆ ทั้งหมด วิธีการสามารถนิยามใหม่ในวัตถุที่ผู้ใช้กำหนดและเรียกโดย JavaScript ในเวลาที่เหมาะสม วิธีการ TOSTRING เป็นตัวอย่างของวิธีการที่นิยามใหม่บ่อยครั้ง
ในการอ้างอิงภาษานี้คำอธิบายของแต่ละวิธีวัตถุรวมถึงข้อมูลการใช้งานเริ่มต้นและวัตถุเฉพาะสำหรับวัตถุ JavaScript ภายใน
ในแง่ของความเข้ากันได้ของ IE เอกสาร MSDN ของ Microsoft คือ "วัตถุวัตถุได้รับการแนะนำใน Internet Explorer ก่อน Internet Explorer 6" ดังนั้นไม่ต้องกังวล ~