Namespace в JavaScript

В JavaScript нет понятия namespace в классическом понимании, как в языках вроде Java или C#, где namespaces — это особая структура для именования классов и модулей. Однако, есть похожие концепции, которые позволяют организовывать код и предотвращать конфликты имен:

Имена объектов (Object Namespaces)


Это простейший способ создать пространство имен. Вы создаете объект, в котором хранятся все ваши функции и переменные:
var MyApp = {};

MyApp.Utils = {
    add: function(a, b) { return a + b; },
    multiply: function(a, b) { return a * b; }
};

console.log(MyApp.Utils.add(2, 3)); // Output: 5

IIFE (Immediately Invoked Function Expression)


Это анонимная функция, которая исполняется сразу после объявления. Внутри нее можно объявлять приватные переменные и функции, доступные только внутри этой функции:
(function () {
    var privateVar = "I'm private";
    
    window.MyApp = {
        publicMethod: function() {
            console.log(privateVar);
        }
   
...

Как организовать код в JavaScript

Организация кода в JavaScript важна для поддержания чистоты, ясности и удобства дальнейшей поддержки и развития проекта. Рассмотрим несколько базовых принципов и методик, которые помогут структурировать ваш код эффективно.

Модульность


Одним из самых важных принципов является деление кода на модули. Каждый модуль должен отвечать за отдельную задачу и предоставлять четко определенное API.
  • CommonJS (require/exports): традиционный подход, используемый в Node.js.
  • ES Modules (import/export): современная спецификация, поддерживаемая большинством современных браузеров и Node.js.

Пример ES-модулей:
// utils.js
export function add(a, b) {
    return a + b;
}

// main.js
import { add } from './utils.js';
console.log(add(2, 3)); // 5

Namespace (Пространства имен)


Для избежания конфликтов имен в глобальном пространстве можно использовать namespaces:
var myApp = {};

myApp.utils = {
    add: function(a, b) {
        return a + b;
    }
};

console.log(myApp.utils.add(2, 3));
...

Перевод rows в пиксели на JS и jQuery

Представим, что есть такой textarea:
<textarea name="val[text]" rows="12" cols="50" id="text"></textarea>

И необходимо при помощи чистого JavaScript или jQuery получить значение rows="12" и перевести его в пиксели. Как это сделать в этой статье.

Для того чтобы получить значение атрибута rows и конвертировать его в пиксели на jQuery, нужно выполнить несколько шагов:
  1. Получить значение атрибута rows с помощью jQuery.
  2. Преобразовать это значение в пиксели, умножив на среднюю высоту строки.

Пример кода:
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Пример преобразования rows в пиксели</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <textarea name="val[text]" rows="12" cols="50" id="text"></textarea>

    <script>
        // Получаем значение атрибута rows
        var rowsCount = parseInt($('#text').attr('rows'));

        // Средняя высота строки обычно принимается равной 20 пикселям
...

Как в JS / jQuery сделать неизменную переменную?

В стандартной JavaScript и jQuery нет понятия «константной» переменной, как в языках программирования, таких как Java или C++. Однако есть несколько способов, которые помогут достичь аналогичного эффекта:

Способ 1: Использовать ключевое слово const


Синтаксис ES6 (ECMAScript 2015) ввёл ключевое слово const, которое позволяет объявлять переменные, которые не могут быть повторно определены:
const MY_CONSTANT = 'This is a constant';
console.log(MY_CONSTANT); // This is a constant

MY_CONSTANT = 'New Value'; // Будет ошибка: Assignment to constant variable.

Способ 2: Использовать IIFE (Immediately Invoked Function Expression)


Если нужно объявить постоянную переменную в локальном контексте, можно использовать немедленно вызываемую анонимную функцию:
(function () {
    var CONSTANT_VALUE = 'Some Constant Value';
    console.log(CONSTANT_VALUE); // Some Constant Value
})();

// Попытка доступа извне невозможна:
console.log(CONSTANT_VALUE); // ReferenceError: CONSTANT_VALUE
...

PHP: Ошибка "Creation of dynamic property"

Начиная с версии PHP 8.2, появилась новая ошибка "Creation of dynamic property", которая предупреждает разработчиков о недопустимом создании динамических свойств в классах. Эта ошибка сигнализирует о переходе PHP к более строгим стандартам объектно-ориентированного программирования и подготовке к отказу от старых практик.

Что такое ошибка "Creation of dynamic property"?


Ошибка "Creation of dynamic property" возникает, когда программа пытается создать новое свойство класса во время выполнения, не объявляя его предварительно в определении класса. Ранее такое поведение разрешалось, но начиная с PHP 8.2, оно объявлено устаревшим и в будущем будет полностью запрещено.

Пример кода, вызывающего ошибку:
class ExampleClass {}
$obj = new ExampleClass();
$obj->newProperty = 'value'; // Создание динамического свойства

Почему это считается проблемой?


Ранее PHP позволял динамически создавать свойства, что приводило к следующим проблемам:
  • Низкая читаемость кода: Невозможно было сразу
...