Два вопроса о моем методе.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 ответ

<pre class="prettyprint linenums">Cat.prototype = new Animal(); </pre>

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

Cat.prototype = Object.create(Animal.prototype);
<pre class="prettyprint linenums">document.write("The name of cat is: " + cat.getName() + ""); </pre>

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

<pre class="prettyprint linenums">// 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); </pre>

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

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

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

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

<pre class="prettyprint linenums">Panda.prototype.setStuff = function(newName, newSound, newOwner) { if((typeof newName != 'undefined') && (typeof newSound != 'undefined') && (typeof newOwner != 'undefined')) { Panda.prototype.setStuff = function(newName, newSound, newOwner) { </pre>

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

<pre class="prettyprint linenums">Cat.prototype.getMood = … Cat.prototype.setMood = … Panda.prototype.getMood = … Panda.prototype.setMood = … </pre>

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

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

Интересное использование провала. Однако, что произойдет в случае прохождения 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.