สัญลักษณ์ `# 'ทำอะไรใน JavaScript?

Nov 23 2020

ฉันพบรหัสที่มี#เครื่องหมาย ใช้ทำอะไร? รหัสมีลักษณะดังนี้:

class someObject{
  #someMethod(){
    //do something 
  }
}

คำตอบ

5 T.J.Crowder Nov 23 2020 at 20:05

มันคือเครื่องหมาย (แทนที่จะเป็นตัวดำเนินการ) ที่บ่งบอกว่าสมาชิกนั้นเป็นแบบส่วนตัว - ในกรณีนี้คือเมธอดส่วนตัวแต่ยังใช้สำหรับฟิลด์ส่วนตัวด้วย

คุณไม่สามารถใช้เมธอดส่วนตัวหรือฟิลด์ส่วนตัวในโค้ดนอกคลาสที่ประกาศได้ ตัวอย่างเช่น:

class Example {
    doSomething() {
        this.#method("from doSomething"); // <== Works
    }
    #method(str) {
        console.log("method called: " + str);
    }
}
const e = new Example();
e.doSomething();
e.#method(); // <=== FAILS
3 Mr.Alien Nov 23 2020 at 20:05

นี่เป็นข้อเสนอทดลอง คุณสามารถกำหนดเมธอด 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
1 Jondi Nov 23 2020 at 20:08

แฮชใช้เพื่อกำหนดฟิลด์คลาสส่วนตัว