Что означает super_?

183
21 января 2019, 04:40

Node_JS:

В встроенном модуле util есть функция inherits. Я знаю, что такое super в js, но что такое super_?

exports.inherits = function(ctor, superCtor){  
    ctor.super_ = superCtor  
    ctor.prototype = Object.create(superCtor.prototype, {  
      constructor: {
        value:ctor,
        enumerable:false,
        writable:true,
        configurable:true
      }
    });
};
Answer 1

Подчёркивание в начале свойства – общепринятый знак, что свойство является внутренним, предназначенным лишь для доступа из самого объекта и его наследников. Такие свойства называют защищёнными.

Источник: Защищённые свойства

В вашем случаи подчеркивание в конце свойства, скорее всего соглашения по наименованию команды, которая писала модуль.

В JavaScript существует множество разных способов наследования, классового и прототипного, фабричного и через примеси, прямого и непрямого, а так же гибриды нескольких методов. Но у Node.js есть его родной способ с применением util.inherits(ChildClass, ParentClass).

Источник: Краткая заметка про наследование в Node.js

Как я понял метод inherits, это имитация метода Object.create (Это мое сугубое предположение, ибо я не знаю как реализован метод inherits), а в свойство ctor.super_ (ctor - ChildClass) присваивается функция-конструктор, или объект. Это сделано для того, что бы иметь доступ к методам этой функции, или объекта для дальнейшего использования.

Пример:

'use strict'; 
  
let animal = { 
  walk() { 
    return "I'm walking"; 
  } 
}; 
  
let rabbit = { 
  __proto__: animal, 
  walk() { 
    console.log(this.walk); 
    console.log(super.walk()); // I'm walking 
  } 
}; 
  
rabbit.walk();

Тут есть два метода walk. Допустим надо вызвать метод walk, который унаследован от animal, но так как у нас есть свой родной метод, мы этого сделать не можем, разве что так: rabbit.__proto__.walk();. Вот тут и приходит на выручку оператор super.

Ключевое слово super используется для вызова функций, принадлежащих родителю объекта.

Описание

В конструкторе ключевое слово super используется как функция, вызывающая родительский конструктор. Её необходимо вызвать до первого обращения к ключевому слову this в теле конструктора. Ключевое слово super также может быть использовано для вызова функций родительского объекта.

Источник: super

Если резюмировать: _ - это общепринятый знак для свойств, которые являются внутренними. Они предназначенным лишь для доступа из самого объекта и его наследников, а свойство super_ - это имитация оператора super из js.

READ ALSO
Как запустить код js после scrollTo?

Как запустить код js после scrollTo?

При клике на кнопку нужно проскролить к блоку top-bar и только после этого запустить остальную часть скриптаКак отследить это событие?

151
Ключи объекта - элементы массива

Ключи объекта - элементы массива

Возможно ли сделать объект такого вида? Выводится ошибка, что нельзя использовать квадратные скобки в ключах:

282
Сохранить размер и позицию элемента при изменении родительского элемента в HTML через Javascript

Сохранить размер и позицию элемента при изменении родительского элемента в HTML через Javascript

У меня есть элемент в ячейке таблицы, у него в стиле указано width: 100%; height: 100%, я вытаскиваю элемент из таблицы и перемещаю его в bodyПосле этого...

163
How to make loading of template after ngOnInit. Angular 5

How to make loading of template after ngOnInit. Angular 5

When I am logged in and go to the login I shortly see the login form and then the normal dashboardThe login form should not be visible at all for logged in users when they visit the main page

166