В JavaScript функции настолько мощны, что позволяют создавать ООП и модульные концепции. Следующие концепции реализованы с использованием функции только в JavaScript:
- Метод
- Класс
- Конструктор
- Модуль
Ниже приведен код, который создает класс MyClass и имеет закрытые члены:
function MyClass(a) {
var count = 3; // private member
// this check function is private function
function check() {
if (count > 0) {
count--;
return true;
}
else {
return false;
}
}
this._a = a;
this.get = function () {
if (check()) { // use of private function
return this._a;
}
else {
return "Thullu"; // after invoking get method 3 times in the object this else will be executed
}
}
}
В приведенной выше кодовой переменной count является закрытым, поскольку любой объект, созданный из MyClass, не будет иметь этой переменной, аналогично, функция check () является закрытой функцией, поскольку эта функция не является частью этого в MyClass. Когда мы создаем объект MyClass, используя ключевое слово new, это возвращается. Эта концепция возможна в JavaScript из-за лексической области видимости (функциональная область видимости).
Когда мы создаем объект этого класса MyClass и вызываем метод get более 3 раз:
Я хотел бы написать несколько замечаний относительно нового ключевого слова.
Когда функция вызывается с оператором new, новый объект создается с членами-прототипами и присваивается этому.
Вышеуказанное утверждение верно только в том случае, если в функции нет явного возвращаемого значения Если явное возвращение присутствует в классе (функции), то этому же назначению будет присвоен объект.
Я хотел бы привести еще один пример с очень простой функциональностью, как во всех имеющихся у нас языках ООП. Мы объявляем приватное поле, а затем используем открытые свойства для предоставления приватного поля, более формальным способом и способом ООП, и создаем метод Get и Set для обновления приватного поля или извлечения приватного члена класса.
Та же функциональность get и set для приватных переменных в JavaScript, которую мы можем достичь, как показано в следующем примере:
// private class with get and set methods
function MyClass() {
var _privateField = 0; // It is private field as it is not part of "this"
this.GetPrivateField = function () {
return _privateField;
};
this.SetPrivateField = function (value) {
_privateField = value;
};
}