JavaScript'te "#" sembolü ne işe yarar?

Nov 23 2020

#İşareti içeren kodla karşılaştım . Ne için kullanılır? Kod şuna benzer:

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

Yanıtlar

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

Bu bir var deseni- üyesi özel olduğunu gösterir (daha doğrusu bir operatörün yerine) - bu durumda, bir de özel yöntemle , ama aynı zamanda için kullanılan özel alanlar .

Sınıfın dışındaki kodda özel bir yöntem veya özel alan kullanamazsınız. Örneğin:

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

Bu deneysel bir öneridir. Özel JavaScript yöntemlerini kullanarak tanımlayabilirsiniz.#

Daha fazla bilgi için MDN belgelerine bakabilirsiniz.

Sınıf özellikleri varsayılan olarak geneldir ve sınıf dışında incelenebilir veya değiştirilebilir. Ancak özel sınıf alanlarının karma öneki kullanılarak tanımlanmasına izin veren deneysel bir öneri vardır #.


ES5 kullanarak benzer bir şey elde edebilirsiniz (sadece açıklamak için basitlik adına), burada Özel yöntemler (JavaScript'in yerel olarak sahip olmadığı) gibi bir şeyi simüle edebilirsiniz.

Örneğin:

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
  }
}

Yukarıda, olarak çağrılabilecek inityöntemi ortaya çıkaracak , oysa sizin üst yönteminin dışında erişilemezsiniz.someObjsomeObj.init()someMethod

Misal:

someObj.init(); //works
someObj.someMethod(); //won't be accessible
1 Jondi Nov 23 2020 at 20:08

karma, özel sınıf alanlarını tanımlamak için kullanılır