สัญลักษณ์ `# 'ทำอะไรใน JavaScript?
ฉันพบรหัสที่มี#เครื่องหมาย ใช้ทำอะไร? รหัสมีลักษณะดังนี้:
class someObject{
#someMethod(){
//do something
}
}
คำตอบ
มันคือเครื่องหมาย (แทนที่จะเป็นตัวดำเนินการ) ที่บ่งบอกว่าสมาชิกนั้นเป็นแบบส่วนตัว - ในกรณีนี้คือเมธอดส่วนตัวแต่ยังใช้สำหรับฟิลด์ส่วนตัวด้วย
คุณไม่สามารถใช้เมธอดส่วนตัวหรือฟิลด์ส่วนตัวในโค้ดนอกคลาสที่ประกาศได้ ตัวอย่างเช่น:
class Example {
doSomething() {
this.#method("from doSomething"); // <== Works
}
#method(str) {
console.log("method called: " + str);
}
}
const e = new Example();
e.doSomething();
e.#method(); // <=== FAILS
นี่เป็นข้อเสนอทดลอง คุณสามารถกำหนดเมธอด Private JavaScript โดยใช้#
สำหรับข้อมูลเพิ่มเติมคุณสามารถดูเอกสาร MDN
คุณสมบัติของคลาสเป็นแบบสาธารณะโดยค่าเริ่มต้นและสามารถตรวจสอบหรือแก้ไขภายนอกคลาสได้ อย่างไรก็ตามมีข้อเสนอทดลองที่อนุญาตให้กำหนดฟิลด์คลาสส่วนตัวโดยใช้
#คำนำหน้าแฮช
คุณสามารถบรรลุสิ่งที่คล้ายกันได้โดยใช้ ES5 (เพื่อความง่ายในการอธิบาย) ซึ่งคุณสามารถจำลองบางอย่างเช่นวิธีการส่วนตัว (ซึ่ง JavaScript ไม่มีแบบดั้งเดิม)
ตัวอย่างเช่น:
function someObj() { //assuming this is a class definition
function someMethod() { //private method which is not accessible outside someObj
}
function init() { //initializes some methods or code, private methods can be used here
someMethod();
}
return {
init //only exposes the init method outside
}
}
ในข้างต้นจะเปิดเผยเฉพาะinitเมธอดsomeObjที่สามารถเรียกได้ว่าเป็นsomeObj.init()เท่านั้นในขณะที่คุณsomeMethodจะไม่สามารถเข้าถึงได้นอกเมธอดหลัก
ตัวอย่าง:
someObj.init(); //works
someObj.someMethod(); //won't be accessible
แฮชใช้เพื่อกำหนดฟิลด์คลาสส่วนตัว