ITVDN logo
Видеокурсы по
программированию

Доступ более чем к 7700 видеоурокам от $19.99

Подписка
ITVDN logo
Видеокурсы по
программированию

Доступ более чем к 7700 видеоурокам от $19.99

Подписка

Введение

Несмотря на то, что в 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/

СТАТЬИ ПО СХОЖЕЙ ТЕМАТИКЕ
ВИДЕО КУРСЫ ПО СХОЖЕЙ ТЕМАТИКЕ

КОМЕНТАРИИ И ОБСУЖДЕНИЯ

ОЦЕНИТЕ ДАННЫЙ МАТЕРИАЛ

ПОДПИСКА НА ITVDN ВЫГОДА ДО 29.95$ НА ОБУЧЕНИЕ ПРЕСТИЖНЫМ ПРОФЕССИЯМ!

1 месяц19.99$
подписка

легкий старт в обучении

3 месяца49.99$
подписка

выгода от подписки до9.98$

6 месяцев89.99$
подписка

выгода от подписки до29.95$