JavaScript ООП (прототип) #2

Nov 27 2022
Привет, друзья, меня зовут Беннисон. В этом блоге я собираюсь объяснить, как ООП работает в Javascript, и объяснить, чем оно отличается от классического ООП. Прежде чем читать эту статью, пожалуйста, прочтите мой предыдущий блог, посвященный основам ООП.
Javascript ООП часть II

Привет, друзья, меня зовут Беннисон. В этом блоге я собираюсь объяснить, как ООП работает в Javascript, и объяснить, чем оно отличается от классического ООП. Прежде чем читать эту статью, пожалуйста, прочтите мой предыдущий блог, посвященный основам ООП .

Что такое прототип?

  • В Javascript у нас есть то, что называется прототипом. В JavaScript каждый объект будет связан с определенным прототипом. Итак, у каждого объекта есть прототипы. прототип также содержит свойства и методы.
  • Здесь важно то, что методы и свойства прототипа могут быть доступны объекту.
  • Классическое ООП против Javascript ООП
  • В классическом ООП объект создается из класса, что называется созданием экземпляра. Здесь класс — это просто схема для создания объектов.
  • Но в Javascript эта терминология просто другая. Здесь каждый объект связан с другими объектами , и эти объекты называются прототипами .
  • Наследование прототипов означает прототип, содержащий методы, и прототипы, доступные для всех объектов, связанных с этим прототипом.
  • Итак, объект наследует методы и свойства от прототипа, вот как это называется прототипным наследованием. это наследование отличается от наследования классов, когда один класс наследуется от другого класса. Но в данном случае экземпляр наследуется от базового класса.
  • На изображении выше в javascript стрелка ООП указывает вверх, это означает, что объект делегирует свое поведение прототипам.
  • В классическом ООП методы копируются из класса в экземпляры (объекты).
  • const numbers = [1, 2, 3, 4,5];
    numbers.map((num) => num * 2)
    

  • Если мы просмотрим Google для понимания метода карты javascript, в документе MDN мы увидим, что например Array.prototype.map()
  • Здесь « Array.prototype()» — это прототип для всех объектов массива, которые мы создаем в JavaScript. Поэтому все массивы имеют доступ к методу карты.
  • Теперь этот объект-прототип содержит все методы массива, включая карту.
  • Итак, в приведенном выше примере « Array.Prototype » является прототипом числового массива, эта переменная числового массива связана с прототипами. Поэтому он имеет доступ ко всем методам, которые определены в объекте « array.prototype ». Таким образом, в приведенном выше примере массив «число» наследует карту методов.
  • В Javascript мы можем реализовать прототипное наследование в трех направлениях: один — функция-конструктор, второй — классы ES6, а последний — метод Object.Create().
  • Функция-конструктор используется для создания объектов из функций. именно так реализованы встроенные объекты, такие как методы Array и map.
  • Это современная альтернатива функциям-конструкторам. Классы ES6 работают так же, как функция конструктора. Класс ES6 не ведет себя как классический ООП. За кулисами классы ES6 реализуются с помощью функций конструктора.
  • class User {
      constructor(firstName, lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
      }
      getFullName() {
        console.log(this.firstName + ' ' + this.lastName);
      }
    }
    
    const user = new User('Bennison', 'J');
    
    console.log(user); // { firstName: 'Bennison', lastName: 'J' }
    
    console.log(user.hasOwnProperty('firstName')); // true
    console.log(user.hasOwnProperty('getFullName')); // false
    

  • И в приведенном выше примере мы видим метод hasOwnProperty, который помогает нам проверить свойство, и метод является собственным свойством объекта, который называется методом hasOwnProperty.
  • Метод «object.create()» — самый простой способ связать объект с объектом-прототипом.
  • const objOne = {
      firstName: 'Bennison',
      lastName: 'J',
      getFullName: function () {
        console.log(this.firstName + ' ' + this.lastName);
      }
    };
    
    const objTwo = Object.create(objOne);
    
    console.log(objTwo); // {}
    objTwo.getFullName(); //  Bennison J
    

  • Метод «Object.create» возвращает пустой объект с прототипом. и прототипом будет то, что мы передали этому методу.
  • Я надеюсь, что в этом блоге мы изучили основы прототипного наследования в Javascript. Если вы не смогли понять приведенные выше примеры, не волнуйтесь, я объясню больше об этих концепциях в своих следующих блогах. Спасибо, что читаете этот блог, до скорой встречи.