Два вопроса о моем методе.getStuff и программировании OO в Javascript

Следующий блок кода содержит ряд функций, которые охватывают ориентированное на объект программирование в Javascript. Он основан на третьем видеоуроке Youtuber, Дерека Банаса.

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

Очевидно, что инструкции print после него не выполняются, поэтому, похоже, что-то не так. Что не так с моим кодом?

Кроме того, у меня есть общий вопрос: как я мог использовать ориентированное на объекты программирование на веб-сайте группы? Эти идеи хороши для игр, но я не вижу использования на общем веб-сайте (я изучил программирование OO для Pygame до сих пор, и это имеет смысл для настройки игры, но idk использует на веб-сайте).

Вот мой код, пропустите снизу метод.getStuff:

<title> Tutorial 3 (Object Orientated Programming) </title>
 

 

 <noscript>


 </noscript>


 

 
 <p> This is a sample paragraph </p>
1 ответ

Cat.prototype = new Animal();

Не делай этого. Лучше:

Cat.prototype = Object.create(Animal.prototype);
document.write("The name of cat is: " + cat.getName() + "");

Не пытайтесь использовать document.write. Например, скрипты, подобные этому, вместо этого используйте console.log.

// Method Overloading: Creating multiple different versions or methods that all
// have a different number of attributes

// Aka, a different version of a method will be called depending on how many
// arguments are passed to the function

setStuff(newName);
setStuff(newName, newSound);
setStuff(newName, newSound, newOwner);

Вероятно, эти три строки также войдут в комментарий. Функция setStuff не setStuff нигде, поэтому попытка вызвать ее вызовет ошибку и остановит выполнение скрипта. Проверьте консоль ошибок. Лучше:

// setStuff(newName);
// setStuff(newName, newSound);
// setStuff(newName, newSound, newOwner);
Cat.prototype.setMood = function(newMood) {
 …
 document.write("Please enter a valid mood!");
}

Совет ООП: старайтесь не взаимодействовать с пользователем в методах setter. Это слишком специфично и предполагает, что a) что пользователь вызвал метод (а не программист); b) что пользователь каким-то образом что-то ввел; c) что предпочтительным методом вывода для такого типа ошибок является document.write. Не то, что может быть правдой.

Вместо этого сделайте throw new Error("not a valid mood") или около того. Поймайте его в коде пользовательского интерфейса, если это то, что может быть введено пользователем, и также выводит сообщение об ошибке. Это не имеет ничего общего с кошками.

Panda.prototype.setStuff = function(newName, newSound, newOwner) {
 if((typeof newName != 'undefined') && (typeof newSound != 'undefined') && (typeof newOwner != 'undefined')) {
 Panda.prototype.setStuff = function(newName, newSound, newOwner) {

Что, что? Объявлять (назначать) метод только один раз! Я точно не проверял, но кажется вероятным, что также есть синтаксическая ошибка в закрывающих фигурных скобках.

Cat.prototype.getMood = …
Cat.prototype.setMood = …
Panda.prototype.getMood = …
Panda.prototype.setMood = …

Не повторяйся! Возможные решения ООП включают здесь:

  • определить настроения в классе Animal
  • ввести новый подкласс AnimalWithMood - это только некоторые животные могут иметь настроение
  • используйте шаблон mixin, если вы хотите, чтобы произвольные классы имели настроение
switch(arguments.length) {
 case 3:
 this.owner = newOwner;
 case 2:
 this.sound = newSound;
 case 1: 
 this.name = newName;
}

Интересное использование провала. Однако, что произойдет в случае прохождения 4 аргументов, следует ли их игнорировать?

Явная проверка будет лучше:

if (arguments.length >= 3)
 this.owner = newOwner;
if (arguments.length >= 2)
 this.sound = newSound;
if (arguments.length >= 1)
 // do validity checks in this block!
 this.name = newName;

Совет ООП: Божьи методы, подобные этому setStuff, презирают - вы видите его при имени метода, включая "материал". Рассмотрим более плавный интерфейс с цепочкой методов или объекты в качестве параметров.

У меня есть общий вопрос: как я могу использовать ориентированное на объекты программирование на веб-сайте группы?

Очень много общего. ООП является парадигмой программирования и не имеет ничего общего с функциональностью кода. Кроме того, "веб-сайт XY" обычно не нуждается в каком-либо программировании. Более конкретно, какие интерактивные/динамические материалы вы хотите видеть на своей странице.

licensed under cc by-sa 3.0 with attribution.