Класи JavaScript - Блог ITVDN
ITVDN: курси програмування
Відеокурси з
програмування

    Обери свою IT спеціальність

    Підписка

    Обери свою IT спеціальність

    Підписка

      Класи JavaScript

      advertisement advertisement

      Введение

      Несмотря на то, что в JavaScript нет классов, этот язык представляет концепции объектно-ориентированного программирования.


      JavaScript содержит функции первого класса, это означает, что мы можем расценивать функции как объекты, то есть мы получаем возможность возвращать или передавать их в другие функции. Это позволяет нам создавать классоподобную семантику в функциях. В этой статье мы сосредоточимся на таких особенностях JavaScript:

      • Объекты класса;
      • Конструктор;
      • Закрытые члены;
      • Открытые/ общедоступные члены;
      • Статические члены;
      • Наследование.

      В этой статье термины «класс» и «функция» взаимозаменяются. Хотя это различные понятия, они используются аналогично в контексте данной статьи.

      Объекты класса

      var Person = function () { };

      var person1 = new Person();

      var person2 = new Person();

      console.log(person1 instanceof Person);  // true

      console.log(person2 instanceof Person); // true

      Представьте себе класс Person,созданный с помощью выражения функции. Мы можем добавлять объекты этого класса, используя ключевое слово new.Каждый объект занимает отдельное место в памяти, но имеет тип Person.

      Конструктор

      var Person = function (firstName) {

          this.firstName = firstName;

          console.log('Instance created');

      };

      var person1 = new Person("Foo"); // logs "Instance created"

      var person2 = new Person("Bar"); // logs "Instance created"

      console.log('person1 is ' + person1.firstName); // logs "Foo"

      console.log('person2 is ' + person2.firstName); // logs "Bar"

      Определение функции действуют как конструктор класса Person. Аргумент функции – это параметр, переданный конструктору при создании объекта. Используя ключевое слово this, мы можем инициализировать атрибуты класса, например firstName.

      Закрытые члены

      var Person = function (firstName) {

          var firstName = firstName;

      };

      var person1 = new Person("Foo");

      var person2 = new Person("Bar");

      person1.firstName; // undefined

      person1.firstName; // undefined

      Область видимости firstName, находясь внутри функции Person, ограничена. Идеальный способ доступа и управление закрытыми членами класса реализуется с помощью функции accessor, похожей на setter() и getter() в Java. 

      var Person = function (firstName) {

          var firstName;

      };

      Person.prototype.setFirstName = function (firstName) {

          this.firstName = firstName;

      }

      Person.prototype.getFirstName = function () {

          return this.firstName;

      }

      var person1 = new Person();

      var person2 = new Person();

      person1.setFirstName('Foo');

      person2.setFirstName('Bar');

      person1.getFirstName(); // Foo

      person2.getFirstName(); // Bar

      Публичные члены 

      var Person = function (firstName) {

          this.firstName = firstName;

      };

      Person.prototype.sayHello = function () {

          console.log(this.firstName + ' says Hello!');

      }

      var person1 = new Person("Foo");

      var person2 = new Person("Bar");

      person1.sayHello(); // logs "Foo says Hello!"

      person2.sayHello(); // logs "Bar says Hello!"

      firstName и sayHello  – публичные члены класса Person. Они доступны и могут быть использованы вне определения функции. 

      Статические члены

      var Person = function () { }

      Person.firstName = "First Name";

      var person1 = new Person();

      console.log(person1.firstName); //logs undefined

      console.log(Person.firstName); //logs "First Name"

      Статические члены класса доступны с className, на них невозможно воздействовать объектами класса.

      Наследование

      var Person = function (firstName) {

          this.firstName = firstName;

      };

      Person.prototype.sayHello = function () {

          console.log("Hello, I'm " + this.firstName);

      };

      var Student = function (firstName, subject) {

          Person.call(this, firstName);

          this.subject = subject;

      };

      Student.prototype = Object.create(Person.prototype);

      Student.prototype.constructor = Student;

      var student1 = new Student('Foo', 'Math');

      student1.sayHello();   // "Hello, I'm Foo"

      console.log(student1 instanceof Person);  // true

      console.log(student1 instanceof Student); // true

      Student дочерний класс класса Parent, он автоматически наследует все члены родительского класса. Мы делаем определенный вызов конструктору родительского класса, используя Person.call и убеждаемся, что прототип наследуется от Person. Этот тип наследования называется прототипным.

      Использование данных элементов в модуле JavaScript улучшит Ваш код и сделает его модульным.

      Источник : http://pankajparashar.com/posts/javascript-classes/

      КОМЕНТАРІ ТА ОБГОВОРЕННЯ
      advertisement advertisement

      Покупай подпискус доступом ко всем курсам и сервисам

      Библиотека современных IT знаний в удобном формате

      Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

      Стартовый
      • Все видеокурсы на 3 месяца
      • Тестирование по 10 курсам
      • Проверка 5 домашних заданий
      • Консультация с тренером 30 мин
      59.99 $
      Оформить подписку
      Премиум Plus
      • Все видеокурсы на 1 год
      • Тестирование по 24 курсам
      • Проверка 20 домашних заданий
      • Консультация с тренером 120 мин
      • Скачивание видео уроков
      120.00 $
      199.99 $
      Оформить подписку
      Акция
      Базовый
      • Все видеокурсы на 6 месяцев
      • Тестирование по 16 курсам
      • Проверка 10 домашних заданий
      • Консультация с тренером 60 мин
      89.99 $
      Оформить подписку
      Notification success
      Ми використовуємо cookie-файли, щоб зробити взаємодію з нашими веб-сайтами та послугами простою та значущою.