โดเมนวัตถุ ECMAScript
- หน้าก่อน ชนิดวัตถุ
- หน้าต่อไป นิยามหมวดหมู้หรือวัตถุ
หลักขอบเขตคือส่วนที่ความชอบด้วยของตัวแปร
หลักขอบเขตที่เปิดเผยเสรี หลักขอบเขตที่เปิดเผยเสรีและหลักขอบเขตที่ทำงานเป็นหนึ่งเดียวกัน
ความหมาย
ในการออกแบบโปรแกรมที่มีทฤษฎีทางแนวคิดเชิงแบบแบบสนิทและเปิดเผยเสรีเป็นหลักยิ่งกว่าทั้งหมด ในหลักขอบเขตที่เปิดเผยเสรี คุณสมบัติของโอปเจ็กท์สามารถเข้าถึงได้จากภายนอกโอปเจ็กท์ นั่นก็คือเมื่อมีการสร้างตัวตนของโอปเจ็กท์แล้ว จึงสามารถใช้คุณสมบัติที่เปิดเผยเสรีของมันได้ ส่วนในหลักขอบเขตที่เปิดเผยเสรี คุณสมบัติสามารถเข้าถึงได้ได้แค่จากภายในโอปเจ็กท์ ซึ่งก็หมายความว่าสำหรับโลกภายนอก นั้นเป็นคุณสมบัติที่ไม่มีอยู่
หลักขอบเขตที่เปิดเผยเสรีก็ใช้ในการกำหนดคุณสมบัติและวิธีที่เปิดเผยเสรี แต่มีสามารถเข้าถึงได้โดยเฉพาะชั้นทางลูกของมัน
ECMAScript มีหลักขอบเขตเพียงหนึ่งเท่านั้น
การหารือเกี่ยวกับหลักขอบเขตของ ECMAScript ที่มีอยู่นี้ไม่มีความหมายเท่าไรเพราะ ECMAScript มีหลักขอบเขตเพียงหนึ่งเท่านั้น ซึ่งคือหลักขอบเขตเปิดเผยเสรี ทั้งหมดของแต่ละโอปเจ็กท์ของ ECMAScript ตั้งแต่ที่แรกถึงที่สุดจะเปิดเผยเสรี ดังนั้น ตอนที่เรากำหนดชั้นหรือโอปเจ็กท์ต้องระมัดระวังมากที่สุด จำจะความทราบดีกันว่าทุกคุณสมบัติและวิธีเปิดเผยเสรีโดยเริ่มต้น!
วิธีแก้ปัญหาที่มีความสำคัญ
หลายๆ ผู้พัฒนาที่มีบทความทางอินเทอร์เน็ตที่มีประโยชน์อย่างยิ่งและแก้ปัญหาของ ECMAScript ที่มีอยู่นี้
เนื่องจากขาดหลักขอบเขตเฉพาะบุคคล ผู้พัฒนาได้กำหนดข้อกฎที่กำหนดว่าเครื่องมือและวิธีที่ควรมองว่าเป็นเฉพาะบุคคล
obj._color_ = "blue";
นี่คือรหัสที่มีคุณสมบัติ color หลับแบบเปิดเผยเสรีและสามารถนำไปใช้งานได้ โดยไม่จำเป็นต้องได้รับอนุญาตาล่วงหน้า นอกจากนี้ ในทางปฏิบัติงานของฝ่ายงานด้านภาษาโปรแกรมเล็กน้อยยังไม่ได้มีการเปลี่ยนแปลงที่น่าจะต้องการที่จะนำมาใช้งานโดยมีทั้งหมดเพียงหนึ่งแต่เพียงหนึ่งครั้งเท่านั้น
บางผู้พัฒนายังชอบใช้สัญลักษณ์ช่องว่างใต้เพื่อชี้แสดงสมาชิกเปิดเผย ตัวอย่างเช่น obj._color
ระดับทั่วไป
คุณสมบัติและเมธอดที่มีระดับทั่วไปสามารถเข้าถึงได้ทุกครั้งจากตำแหน่งเดียวกัน ใน Java รายวิธีคลาสสามารถมีคุณสมบัติและเมธอด โดยไม่จำเป็นต้องสร้างตัวแปรของคลาส ตัวอย่างเช่น รายวิธี java.net.URLEncoder ซึ่งฟังก์ชัน encode() คือเมธอดสเตติก
ECMAScript ไม่มีระดับทั่วไป
ในทางทฤษฎี ECMAScript ไม่มีระดับทั่วไป แต่มันสามารถให้กับคอนสตรัคเตอร์คุณสมบัติและเมธอด จำเป็นต้องจำไว้ว่าคอนสตรัคเตอร์เป็นฟังก์ชัน ฟังก์ชันเป็นอ็อบเจกต์ อ็อบเจกต์สามารถมีคุณสมบัติและเมธอด ตัวอย่างเช่น:
function sayHello() { alert("hello"); } sayHello.alternate = function() { alert("hi"); } sayHello(); // ออก "hello" sayHello.alternate(); // ออก "hi"
ในที่นี้ เมธอด alternate() คือเมธอดของฟังก์ชัน sayHello คุณสามารถเรียก sayHello() แบบฟังก์ชันทั่วไปเพื่อออก "hello" หรือเรียก sayHello.alternate() แบบฟังก์ชันเพื่อออก "hi" แม้ว่า alternate() ก็เป็นเมธอดของ sayHello() ในสภาพของระดับทั่วไป ไม่ใช่เมธอดสเตติก
คำว่า this
ฟังก์ชันของ this
หนึ่งในความคิดสำคัญที่สุดใน ECMAScript คือการใช้คำว่า this มันใช้ในเมธอดของอ็อบเจกต์ คำว่า this มักจะบอกถึงอ็อบเจกต์ที่เรียกเมธอดนี้ ตัวอย่างเช่น:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(this.color); }; oCar.showColor(); // ออก "red"
ในรหัสที่อยู่ด้านบน ใช้คำว่า this ในเมธอด showColor() ของอ็อบเจกต์ ในสภาพนี้ this คือ oCar รหัสด้านล่างนี้มีความหมายเหมือนกับรหัสด้านบน:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(oCar.color); }; oCar.showColor(); // ออก "red"
สาเหตุที่ใช้ this
ทำไมใช้ this บ้าง? เพราะในการสร้างตัวแปรตัวนี้ ไม่สามารถทราบได้ว่าผู้พัฒนาจะใช้ชื่อตัวแปรอะไร ใช้ this ให้สามารถนำฟังก์ชันเดียวกันมาใช้ในหลายที่ โปรดคิดและพิจารณาตัวอย่างด้านล่าง:
function showColor() { alert(this.color); }; var oCar1 = new Object; oCar1.color = "red"; oCar1.showColor = showColor; var oCar2 = new Object; oCar2.color = "blue"; oCar2.showColor = showColor; oCar1.showColor(); //ออกอากาศ "red" oCar2.showColor(); //ออกอากาศ "blue"
ในรหัสดังนี้ หลังจากนั้นใช้ this มองหาฟังก์ชัน showColor() แล้ว สร้างวัตถุสองอัน (oCar1 และ oCar2) ซึ่งคุณสมบัติ color ของวัตถุหนึ่งเป็น "red" และคุณสมบัติ color ของวัตถุอีกอันเป็น "blue" ทั้งสองวัตถุมีคุณสมบัติ showColor ที่หนุนตัวฟังก์ชัน showColor () ต้นแบบ (ให้ชื่อว่า ไม่มีปัญหาชื่อเรียก หนึ่งคือฟังก์ชันโลกาล และอีกคือคุณสมบัติของวัตถุ) การเรียกใช้ showColor () ของวัตถุแต่ละอัน ออกอากาศ "red" ของ oCar1 และ "blue" ของ oCar2 นี้เพราะเมื่อเรียกใช้ oCar1.showColor () ฟังก์ชันจะมี this คือ oCar1 และเมื่อเรียกใช้ oCar2.showColor () ฟังก์ชันจะมี this คือ oCar2
ให้เรียกใช้ตัวแปร this ต่อการอ้างอิงคุณสมบัติของวัตถุ ตัวอย่างเช่น ถ้าใช้รหัสดังนี้ ฟังก์ชัน showColor() จะไม่สามารถทำงานได้
function showColor() { alert(color); };
ถ้าไม่ใช้วัตถุหรือคำกำหนด this ระบุตัวแปร ECMAScript จะมองเห็นมันว่าเป็นตัวแปรท้องถิ่นหรือตัวแปรโลก หลังจากนั้นฟังก์ชันจะหาตัวแปรที่มีชื่อว่า color ตัวแปรท้องถิ่นหรือตัวแปรโลก แต่จะไม่พบ ผลลัพธ์อะไร? ฟังก์ชันจะแสดง "null" ในการเตือน
- หน้าก่อน ชนิดวัตถุ
- หน้าต่อไป นิยามหมวดหมู้หรือวัตถุ