1. ภาพรวม
ในภาษา Java เราสามารถกำหนดคลาสของเราเองและสร้างวัตถุตามคลาสเหล่านี้เพื่อใช้งาน ใน JavaScript เรายังสามารถกำหนดคลาสของเราเองเช่นการกำหนดคลาสผู้ใช้คลาส Hashtable ฯลฯ
ปัจจุบันอยู่ใน JavaScript มีคลาสมาตรฐานบางอย่างเช่นวันที่อาร์เรย์ regexp สตริงคณิตศาสตร์จำนวน ฯลฯ ซึ่งให้สิ่งอำนวยความสะดวกมากมายแก่เราในการเขียนโปรแกรม แต่สำหรับโปรแกรมลูกค้าที่ซับซ้อนสิ่งเหล่านี้ยังไม่เพียงพอ
ซึ่งแตกต่างจาก Java, Java2 ให้เรามีคลาสมาตรฐานมากมายซึ่งโดยทั่วไปตรงกับความต้องการการเขียนโปรแกรมของเรา อย่างไรก็ตาม JavaScript มีคลาสมาตรฐานไม่กี่อย่างและความต้องการการเขียนโปรแกรมจำนวนมากจำเป็นต้องดำเนินการด้วยตัวเอง ตัวอย่างเช่น JavaScript ไม่มีตารางแฮชแต้มซึ่งไม่สะดวกในการจัดการค่าคีย์
ดังนั้นโดยส่วนตัวแล้วฉันคิดว่ามุมมองวัตถุ JavaScript ที่สมบูรณ์ควรมีดังนี้:
2. แนวคิดพื้นฐาน
1. ปรับแต่งวัตถุ
ตามกลไกการขยายวัตถุของ JS ผู้ใช้สามารถปรับแต่งวัตถุ JS ซึ่งคล้ายกับภาษา Java
สอดคล้องกับวัตถุที่กำหนดเองคือวัตถุมาตรฐาน JS เช่นวันที่อาร์เรย์คณิตศาสตร์ ฯลฯ
2. ต้นแบบ
ใน JS นี่เป็นวิธีการสร้างคุณสมบัติและวิธีการของวัตถุและผ่านต้นแบบคุณสามารถเพิ่มคุณสมบัติและวิธีการใหม่ให้กับวัตถุ
ด้วยต้นแบบเราสามารถเพิ่มคุณสมบัติและวิธีการใหม่ให้กับวัตถุมาตรฐาน JS เช่นสำหรับวัตถุสตริงเราสามารถเพิ่มวิธีการใหม่ ()
ซึ่งแตกต่างจากภาษาการเขียนโปรแกรมที่เข้มงวดเช่น Java เราสามารถเพิ่มคุณสมบัติใหม่ให้กับวัตถุ JS ในระหว่างการรันไทม์
สามกฎไวยากรณ์
1. วิธีการสร้างวัตถุ
1) วิธีการเริ่มต้นวัตถุ
รูปแบบ: objectName = {คุณสมบัติ 1: ค่า 1, คุณสมบัติ 2: value2, …, propertyn: valuen}
คุณสมบัติเป็นทรัพย์สินของวัตถุ
ค่าคือค่าของวัตถุและค่าสามารถเป็นหนึ่งในสตริงตัวเลขหรือวัตถุ
ตัวอย่างเช่น: var user = {ชื่อ: "user1", อายุ: 18};
var user = {ชื่อ: "user1", งาน: {เงินเดือน: 3000, ชื่อเรื่อง: โปรแกรมเมอร์}
วิธีการที่สามารถเริ่มต้นด้วยวิธีนี้เช่น:
var user = {ชื่อ: "user1", อายุ: 18, getName: function () {return this.name; -ต่อไปนี้จะถูกอธิบายด้วยจุดเน้นของวิธีการสร้างรวมถึงคำจำกัดความของคุณลักษณะและวิธีการและจะอธิบายด้วยการอ้างอิงถึงวิธีการสร้าง
2) วิธีการสร้าง
เขียนคอนสตรัคเตอร์และสร้างวัตถุด้วยวิธีการใหม่ ตัวสร้างอาจมีพารามิเตอร์ตัวสร้าง
ตัวอย่างเช่น:
ฟังก์ชันผู้ใช้ (ชื่ออายุ) {this.name = name; this.age = อายุ; this.canfly = false; } var use = ผู้ใช้ใหม่ ();2. กำหนดคุณสมบัติวัตถุ
1) ใน JS สามารถกำหนดคุณสมบัติสามประเภทสำหรับวัตถุ: คุณสมบัติส่วนตัวคุณสมบัติอินสแตนซ์และคุณสมบัติคลาส คล้ายกับ Java คุณสมบัติส่วนตัวสามารถใช้ภายในวัตถุเท่านั้น คุณสมบัติอินสแตนซ์จะต้องอ้างอิงผ่านอินสแตนซ์ของวัตถุและคุณสมบัติของคลาสสามารถอ้างอิงได้โดยตรงผ่านชื่อคลาส
2) นิยามแอตทริบิวต์ส่วนตัว
คุณลักษณะส่วนตัวสามารถกำหนดและใช้ภายในคอนสตรัคเตอร์เท่านั้น
รูปแบบไวยากรณ์: var propertyName = value;
ตัวอย่างเช่น:
ฟังก์ชั่นผู้ใช้ (อายุ) {this.age = อายุ; var ischild = อายุ <12; this.islittlechild = ischild; } var user = ผู้ใช้ใหม่ (15); การแจ้งเตือน (user.islittlechild); // วิธีการแจ้งเตือนวิธีที่ถูกต้อง (user.ischild); // ข้อผิดพลาด: วัตถุไม่รองรับคุณสมบัติหรือวิธีนี้3) นอกจากนี้ยังมีสองวิธีในการกำหนดคุณลักษณะอินสแตนซ์:
วิธีการต้นแบบรูปแบบไวยากรณ์: functionName.prototype.propertyName = ค่า
วิธีนี้รูปแบบไวยากรณ์: this.propertyName = ค่าให้ความสนใจกับตำแหน่งที่ใช้ในตัวอย่างต่อไปนี้
ค่าข้างต้นอาจเป็นการสร้างอักขระตัวเลขและวัตถุ
ตัวอย่างเช่น:
ฟังก์ชันผู้ใช้ () {} user.prototype.name = "user1"; user.prototype.age = 18; var user = ผู้ใช้ใหม่ (); การแจ้งเตือน (user.age); - -----------------------------------------------------------------------------3) นิยามแอตทริบิวต์คลาส
รูปแบบไวยากรณ์: functionName.ProperTyName = ค่า
ตัวอย่างเช่น:
ฟังก์ชันผู้ใช้ () {} user.max_age = 200; user.min_age = 0; การแจ้งเตือน (user.max_age);อ้างถึงคุณสมบัติคลาสของวัตถุมาตรฐาน JS:
number.max_value // ค่าตัวเลขสูงสุด math.pi // pi
4) นอกเหนือจากวิธีการที่เป็นทางการมากขึ้นแล้วยังมีวิธีที่พิเศษมากในการกำหนดคุณลักษณะรูปแบบไวยากรณ์: OBJ [ดัชนี] = ค่า
ตัวอย่าง:
ฟังก์ชันผู้ใช้ (ชื่อ) {this.name = name; this.age = 18; สิ่งนี้ [1] = "ตกลง"; สิ่งนี้ [200] = "ปี"; } var user = ผู้ใช้ใหม่ ("user1"); การแจ้งเตือน (ผู้ใช้ [1]);ในตัวอย่างข้างต้นเป็นสิ่งสำคัญที่จะต้องทราบว่าแอตทริบิวต์อายุไม่ได้รับผ่าน [1] และสิ่งนี้ [0] จะไม่ได้รับผ่าน [0] นั่นคือดัชนีที่กำหนดโดยดัชนีจะต้องอ้างอิงโดยใช้โหมดดัชนีและไม่ได้กำหนดโดยโหมดดัชนีและต้องอ้างอิงในวิธีปกติ
3. กำหนดวิธีวัตถุ
1) มีวิธีการสามประเภทที่สามารถกำหนดไว้สำหรับวัตถุใน JS: วิธีการส่วนตัววิธีการอินสแตนซ์และวิธีการเรียนคล้ายกับ Java:
วิธีการส่วนตัวสามารถใช้ได้ภายในวัตถุเท่านั้น
ต้องใช้วิธีการอินสแตนซ์ก่อนที่จะสามารถใช้งานได้
วิธีการเรียนสามารถใช้โดยตรงผ่านชื่อคลาส
หมายเหตุ: คำจำกัดความของวิธีการไม่สามารถดำเนินการผ่านวิธีดัชนีที่กล่าวถึงข้างต้น
2) กำหนดวิธีการส่วนตัว
วิธีการส่วนตัวจะต้องกำหนดภายในตัวสร้างและสามารถใช้ภายในตัวคอนสตรัคเตอร์เท่านั้น
รูปแบบไวยากรณ์: function methodname (arg1, …, argn) {}
ตัวอย่างเช่น:
ฟังก์ชันผู้ใช้ (ชื่อ) {this.name = name; ฟังก์ชั่น getNamelength (namestr) {return namestr.length; } this.namelength = getNamelength (this.name); -3) กำหนดวิธีการอินสแตนซ์ปัจจุบันสามารถใช้สองวิธี:
วิธีการต้นแบบใช้นอกคอนสตรัคเตอร์รูปแบบไวยากรณ์:
functionName.prototype.methodname = เมธอด;
หรือ
functionName.prototype.methodname = function (arg1, …, argn) {};
วิธีนี้ใช้ภายในตัวสร้างรูปแบบไวยากรณ์:
this.methodname = วิธีการ;
หรือ
this.methodname = function (arg1, …, argn) {};
ในคำอธิบายไวยากรณ์ด้านบนวิธีการเป็นวิธีที่มีอยู่ข้างนอกแล้ว วิธีการของวัตถุที่จะกำหนดโดยเมธอดนิเมนต์หมายความว่าวิธีการภายนอกถูกกำหนดให้กับวิธีการของวัตถุโดยตรง
การกำหนดวิธีการวัตถุในรูปแบบของฟังก์ชั่น (arg1, …, argn) {} เป็นสิ่งที่นักพัฒนาควรเชี่ยวชาญ
ตัวอย่างบางส่วนของการกำหนดวิธีการอินสแตนซ์: ตัวอย่างที่ 1
ฟังก์ชันผู้ใช้ (ชื่อ) {this.name = name; this.getName = getUserName; this.setName = setUserName; } ฟังก์ชั่น getUserName () {return this.name; } function setUserName (ชื่อ) {this.name = name; -ตัวอย่างบางส่วนของการกำหนดวิธีการอินสแตนซ์: ตัวอย่างที่ 2
ฟังก์ชันผู้ใช้ (ชื่อ) {this.name = name; this.getName = function () {return this.name; - this.setName = function (newName) {this.name = newName; - -ตัวอย่างบางส่วนของการกำหนดวิธีการอินสแตนซ์: ตัวอย่างที่ 3
ฟังก์ชันผู้ใช้ (ชื่อ) {this.name = name; } user.prototype.getName = getUserName; user.prototype.setName = setUserName (); ฟังก์ชั่น getUserName () {return this.name; } function setUserName (ชื่อ) {this.name = name; -ตัวอย่างบางส่วนของการกำหนดวิธีการอินสแตนซ์: ตัวอย่าง 4
ฟังก์ชันผู้ใช้ (ชื่อ) {this.name = name; } user.prototype.getName = function () {return this.name; - user.prototype.setName = function (newName) {this.name = newName; -4) กำหนดวิธีการเรียน
ต้องมีการกำหนดวิธีการคลาสนอกคอนสตรัคเตอร์และสามารถอ้างอิงได้โดยตรงโดยชื่อคอนสตรัคเตอร์
รูปแบบไวยากรณ์:
functionName.methodname = เมธอด;
หรือ
functionName.methodname = function (arg1, …, argn) {};
ตัวอย่าง:
ฟังก์ชันผู้ใช้ (ชื่อ) {this.name = name; } user.getMaxage = getUserMaxage; ฟังก์ชั่น getUserMaxage () {return 200; -หรือ
user.getMaxage = function () {return 200;};
การแจ้งเตือน (user.getMaxage ());
4. การอ้างอิงคุณสมบัติและวิธีการ
1) จากมุมมองของการมองเห็น:
คุณสมบัติและวิธีการส่วนตัวสามารถอ้างอิงได้ภายในวัตถุเท่านั้น
คุณสมบัติและวิธีการของอินสแตนซ์สามารถใช้ได้ทุกที่ แต่ต้องอ้างอิงโดยวัตถุ
คุณสมบัติและวิธีการของคลาสสามารถใช้ได้ทุกที่ แต่ไม่สามารถอ้างอิงได้โดยอินสแตนซ์ของวัตถุ (ซึ่งแตกต่างจาก Java ซึ่งสมาชิกคงที่สามารถเข้าถึงได้โดยอินสแตนซ์)
2) จากระดับวัตถุ:
เช่นเดียวกับการอ้างอิงถึงถั่วชวาสามารถอ้างอิงได้อย่างลึกซึ้ง
หลายวิธี:
คุณสมบัติง่าย ๆ : obj.propertyName
คุณสมบัติวัตถุ: obj.innerobj.propertyname
ดัชนีคุณสมบัติ: obj.propertyname [ดัชนี]
สำหรับการอ้างอิงที่ลึกกว่านั้นคล้ายกับที่ข้างต้น
3) จากวิธีการนิยาม:
แอตทริบิวต์ที่กำหนดผ่านวิธีการดัชนีจะต้องอ้างอิงผ่านวิธีการดัชนี
คุณลักษณะที่กำหนดโดยวิธีการที่ไม่ใช่ดัชนีจะต้องอ้างอิงในวิธีปกติ
หมายเหตุ: วิธีการของวัตถุไม่สามารถกำหนดผ่านวิธีดัชนี
5. การเพิ่มแบบไดนามิกและการลบคุณสมบัติและวิธีการ
1) สำหรับวัตถุที่ได้รับการสร้างอินสแตนซ์เราสามารถเพิ่มและลบคุณสมบัติและวิธีการของมันแบบไดนามิก ไวยากรณ์มีดังนี้ (สมมติว่าอินสแตนซ์ของวัตถุคือ OBJ):
เพิ่มคุณสมบัติของวัตถุแบบไดนามิก
obj.newPropertyName = ค่า;
เพิ่มวิธีการวัตถุแบบไดนามิก
obj.newmethodname = method or = function (arg1, …, argn) {}
ลบคุณสมบัติวัตถุแบบไดนามิก
ลบ obj.propertyName
ลบวิธีการวัตถุแบบไดนามิก
ลบ obj.methodname
2) ตัวอย่าง:
ฟังก์ชันผู้ใช้ (ชื่อ) {this.name = name; this.age = 18; } var user = ผู้ใช้ใหม่ ("user1"); user.sister = "susan"; การแจ้งเตือน (user.sister); // รันผ่านการลบ user.sister; การแจ้งเตือน (user.sister); // รายงานข้อผิดพลาด: วัตถุไม่รองรับคุณสมบัตินี้ user.getMotherName = function () {return "Mary";} การแจ้งเตือน (user.getMotherName ()); // รันผ่าน delete user.getMotherName; การแจ้งเตือน (user.getMotherName ()); // ข้อผิดพลาดรายงาน: วัตถุไม่รองรับวิธีนี้สี่สรุป
1. กลไกวัตถุที่กำหนดเองเป็นหนึ่งในกลไกที่น่าสนใจที่สุดสำหรับ JS นี่เป็นสิ่งที่ยอดเยี่ยมสำหรับโปรแกรมเมอร์ C ++ และ Java!
2. มีสองวิธีในการสร้างวัตถุ: วัตถุเริ่มต้นและตัวสร้าง
3. คุณสมบัติและวิธีการของวัตถุข้อ จำกัด ที่มีการมองเห็นและคุณลักษณะและวิธีการที่มีการมองเห็นที่แตกต่างกันถูกกำหนดแตกต่างกัน
บทความข้างต้นขึ้นอยู่กับวัตถุ JS แอตทริบิวต์การทำงานและวิธีการซึ่งเป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น