Что использовать вместо классов в JavaScript? [дубликат]
этот вопрос уже есть ответ здесь:
- какие методы можно использовать для определения класса в JavaScript, и каковы компромиссы? 19 ответов
фон
Я разработчик с фоновой историей примерно 9 лет как на Java, так и на C#.
в этих языках, Классы и таксономическая классификация присущи и объектной парадигме.
и так, когда ECMA6 вышел, я был очень рад видеть занятия по языку... и я начал использовать их везде.
оказывается, что использование классов в JavaScript является ловушкой.
если вы используете их, вы отправитесь в могилу, никогда не зная, насколько несчастны ты.
и вы никогда не понимал JavaScript. Вы будете думать, что знаете, но это не так.
вопросы
так ясно, после просмотра этой полной конференции, я понял я не знаю, JavaScript.
всю свою жизнь я был отформатирован с парадигмой ООП с классами, и теперь я даже не знаю, где искать помощь или даже начинать.
- в стиле 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");
- каков способ 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
Ура.