Что использовать вместо классов в JavaScript? [дубликат]

этот вопрос уже есть ответ здесь:

фон

Я разработчик с фоновой историей примерно 9 лет как на Java, так и на C#.

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

и так, когда ECMA6 вышел, я был очень рад видеть занятия по языку... и я начал использовать их везде.

оказывается, что использование классов в JavaScript является ловушкой.

если вы используете их, вы отправитесь в могилу, никогда не зная, насколько несчастны ты.

и вы никогда не понимал JavaScript. Вы будете думать, что знаете, но это не так.

вопросы

так ясно, после просмотра этой полной конференции, я понял я не знаю, JavaScript.

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

  1. в стиле JavaScript, как бы вы пошли о представлении животного царства, с наследство? Я бы использовал класс Animal, а затем класс Dog и инстанцировать объекты собак, например. Это не путь JavaScript.

пример не JavaScvript:

class Animal{
    constructor(aName){
        this.name = aName;
    }
}

class Dog extends Animal{
    constructor(){
        super(aName);
        this.type = "Furry dog";
    }
}

let myDog = new Dog("Boby");
  1. каков способ JavaScript сделать это?

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

спасибо заранее.

1 ответов


насколько я знаю, JavaScript-это прототип языка с первоклассными функциями, как вы можете прочитать здесь.

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

конструкторов объектов

чтобы сделать свое собственное определение объекта, вы сделал бы так:

function Animal() {
    this.name = null;
    this.age = 0;
    this.genus = null;
    this.isWild = true;
};

Animal.prototype.hasName = function() {
    return this.name !== null;
};

Animal.prototype.isItWild = function() {
    return this.isWild;
};

// Here we create an instance of Animal
var someAnimal = new Animal();
// Let's give it a name
someAnimal.name = 'Dobby';
console.log('Hey there. My pet name is %s', someAnimal.name);
console.log('is it wild? %o', someAnimal.isWild);

теперь у вас есть прототип животного. Давайте посмотрим, как расширить его свойства, чтобы создать прототип собаки:

function Dog() {
    this.genus = 'Canis';
    this.race = 'unknown';
}

Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.bark = function() {
    console.log('rrouff!);
};

давайте создадим гонку собак сейчас:

function SiberianHusky(name, age) {
    this.name = name;
    this.age = age;
    this.race = 'Siberian Husky';
}

SiberianHusky.prototype = Object.create(Dog.prototype);
SiberianHusky.prototype.constructor = SiberianHusky;

// Let's create our Siberian Husky
var myPet = new SiberianHusky('Bobby', 5);
// Aww. It is barking!
myPet.bark();

прототип объекта

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

Как избежать чрезмерного использования свойства прототипа

вместо того, чтобы писать прототипу каждый раз, вы можете сделать следующее:

Animal.prototype = {
    name: null,
    age: 0,
    genus: null,
    isWild: true,
    hasName: function() { ... }
    isItWild: function() { ... }
}

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

последние заметки

JavaScript-это мультипарадигменный язык. Вы можете использовать Объектно-Ориентированная Парадигма Программирования, в Парадигма Императивного Программирования и Парадигма Функционального Программирования, что означает, что вы можете запрограммировать одно и то же приложение разными способами.

полезные ссылки

https://en.wikipedia.org/wiki/JavaScript

https://en.wikipedia.org/wiki/Prototype-based_programming

Ура.