Что символ `#` делает в 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
Это экспериментальное предложение. Вы можете определить частные методы 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
хэш используется для определения полей частного класса