Рубрики
Uncategorized

Используя наследство Так что вы не повторяете себя и ноты.

Там принцип в программировании называется не повторять себя (сухой). Причина, повторный код — это … Теги с JavaScript, DevOps, учебником, начинающим.

  • Там принцип в программировании называется не повторять себя (сухой). Повторный код причина является проблемой, потому что любые изменения требуют фиксации кода в нескольких местах. Это обычно означает больше работы для программистов и больше места для ошибок.

  • Уведомление в примере ниже, что Ешьте Метод совместно используется Кот и Медведь :

function Cat(name) {
  this.name = name;
}

Cat.prototype = {
  constructor: Cat,
  eat: function() {
    console.log("nom nom nom");
  }
};

function Bear(name) {
  this.name = name;
}

Bear.prototype = {
  constructor: Bear,
  eat: function() {
    console.log("nom nom nom");
  }
};
  • Ешьте Метод повторяется в двух местах. Код может быть отредактирован, чтобы следовать сухому принципу, создавая Supertype (или родитель) под названием Животное :
function Animal() { }

Animal.prototype = {
  constructor: Animal,
  eat: function() {
    console.log("nom nom nom");
  }

};
  • С Животное включает в себя . Ешьте Метод, вы можете удалить его из Кот и Медведь :
function Cat(name) {
  this.name = name;
}

Cat.prototype = {
  constructor: Cat
};

function Bear(name) {
  this.name = name;
}

Bear.prototype = {
  constructor: Bear

};

function Animal() { }

Animal.prototype = {
  constructor: Animal,
  eat: function() {
    console.log("nom nom nom");
  }

};
  • Мы только что отредактировали код в духе сухого, двигая Ешьте Метод Животное Supertype Отказ

Наследует поведение от Supertype

  • В предыдущем посте мы создали Supertype называется Животное Это определило поведение, разделяемое всеми животными:
function Animal() { }
Animal.prototype.eat = function() {
  console.log("nom nom nom");
};
  • Это и следующая часть будет охватывать, как повторно использовать Животное Методы внутри Собака не определяя их снова. Он использует технику, называемую наследство. Эта проблема охватывает первый шаг: сделать экземпляр Supertype (или родитель).
let animal = Object.create(Animal.prototype);
  • Вы также можете использовать это,
let animal = new Animal();
  • Но есть некоторые недостатки при использовании этого синтаксиса для наследования, которые слишком сложны для объема этого примера.

  • Object.Create (OBJ) Создает новый объект и устанавливает obj Как новый объект Прототип Отказ Напомним, что Прототип как «рецепт» для создания объекта. Установив Прототип животное быть Животное прототип , вы эффективно даете животное Пример такой же «рецепт» как любой другой экземпляр Животное Отказ

function Animal() { }

Animal.prototype = {
  constructor: Animal,
  eat: function() {
    console.log("nom nom nom");
  }
};

let beagle = Object.create(Animal.prototype)

beagle.eat(); // will display nom nom nom 
console.log(beagle instanceof Animal); // will display true

Установка прототипа ребенка в экземпляр родителя

  • В предыдущем разделе вы видели первый шаг для наследственного поведения от Supertype (или родитель) Животное : Создание нового экземпляра Животное Отказ

  • Этот пост охватывает следующий шаг: установить Прототип из подтип ( или ребенок) — в этом случае Собака — быть экземпляром Животное Отказ

Dog.prototype = Object.create(Animal.prototype);
  • Помните, что Прототип как «рецепт» для создания объекта. В некотором смысле, рецепт Собака Теперь включает в себя все ключевые «ингредиенты» от Животное Отказ
function Animal() { }

Animal.prototype = {
  constructor: Animal,
  eat: function() {
    console.log("nom nom nom");
  }
};

function Dog() { }

Dog.prototype = Object.create(Animal.prototype); // <----

let beagle = new Dog();
beagle.eat(); // will display when console.log nom nom nom
  • Бигль наследует все Животное Свойства, в том числе Ешьте метод.

Сброс недвижимости унаследованного конструктора

  • Когда объект наследует его Прототип От другого объекта, он также наследует свойство конструктора Supertype.

  • Вот пример:

function Dog() { }
Dog.prototype = Object.create(Animal.prototype);
let beagle = new Dog();
beagle.constructor
  • Но Бигль и все экземпляры Собака следует показать, что они были построены Собака И не Животное . Для этого вы можете вручную установить Собака Конструктор недвижимости к объекту собаки:
function Animal() { }
function Dog() { }

Dog.prototype = Object.create(Animal.prototype);

Dog.prototype.constructor = Dog;

let beagle = new Dog();

console.log(beagle.constructor); // will display [Function: Dog]

Добавить методы после наследования

  • Функция конструктора, которая наследует ее Прототип объект из Supertype Функция конструктора все еще может иметь свои собственные методы в дополнение к унаследованным методам.
  • Например, Собака это конструктор, который наследует его Прототип от животного:
function Animal() { }
Animal.prototype.eat = function() { console.log("nom nom nom"); };

function Dog() { }
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
  • В дополнение к тому, что унаследовано от Животное , вы хотите добавить поведение, которое уникально для Собака объекты. Здесь Собака Получу кора () функция. Функции добавляются в Собака Прототип так же, как и любой функция конструктора:
Dog.prototype.bark = function() {
  console.log("Woof!")
};
  • Сейчас экземпляры Собака будет иметь оба есть () и кора () методы.
function Animal() { }
Animal.prototype.eat = function() { console.log("nom nom nom"); };

function Dog() { }

Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.bark = function() {  // <----
  console.log("Woof!")
}

let beagle = new Dog();
beagle.eat();
beagle.bark()
  • Beagle.eat () будет отображать строку NOM NOM NOM в консоли и Beagle.bark () будет отображать строку Удар! .

Оригинал: «https://dev.to/rthefounding/using-inheritance-so-you-don-t-repeat-yourself-ba8»