#javascript #function
Вопрос:
Мой HTML:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Assignment A</title>
</head>
<body>
<h1>Fortune cookies!</h1>
<input type="text" id="input" placeholder="Add a fortune" />
<button onclick="cookie.add()">Add a fortune!</button><br />
<button onclick="cookie.fortune()">What does your fortune hold?</button>
<p id="output"></p>
<script src="3a.js"></script>
</body>
</html>
Мой javascript:
class Cookie
{
constructor()
{
this.fortunes = ["Insert meaningful quote here.", "insert meaningless quote here."];
}
add()
{
this.fortunes.push(document.getElementById("input").value);
document.getElementById("output").innerHTML = "fortune added!";
}
fortune()
{
document.getElementById("output").innerHTML = this.fortunes[Math.random(--this.fortunes.length)];
}
}
var cookie = new Cookie();
Я чувствую, что я совершенно слеп, но по какой-то причине всякий раз, когда я нажимаю любую из 2 кнопок, которые я сделал, я получаю следующее:
53a.html:12 Uncaught TypeError: cookie.fortune is not a function
at HTMLButtonElement.onclick (3a.html:12)
Пожалуйста, помогите. Я не понимаю, почему мой JS не может вызвать эту функцию. Должно быть, я пропустил что-то крошечное, но я полностью застрял в туннельном зрении.
Комментарии:
1. Вы проверили, что код в вашем файле 3a действительно запущен? Может быть, путь неверен или файл находится не там, где вы ожидаете? Попробуйте добавить
console.log
в него инструкцию и посмотрите, записано ли что-нибудь.2. Можете ли вы подтвердить, что
cookie.add()
это работает так, как ожидалось?
Ответ №1:
Попробуйте переименовать cookie
переменную на другое имя. Это похоже на конфликт document.cookie
.
var cookie = new Cookie();
-> var cookieObj = new Cookie();
onclick="cookie.add()"
-> onclick="cookieObj.add()"
onclick="cookie.fortune()"
-> onclick="cookieObj.fortune()"
class Cookie
{
constructor()
{
this.fortunes = ["Insert meaningful quote here.", "insert meaningless quote here."];
}
add()
{
this.fortunes.push(document.getElementById("input").value);
document.getElementById("output").innerHTML = "fortune added!";
}
fortune()
{
console.log('fortune');
document.getElementById("output").innerHTML = this.fortunes[Math.random(--this.fortunes.length)];
}
}
var cookieObj = new Cookie();
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Assignment A</title>
</head>
<body>
<h1>Fortune cookies!</h1>
<input type="text" id="input" placeholder="Add a fortune" />
<button onclick="cookieObj.add()">Add a fortune!</button><br />
<button onclick="cookieObj.fortune()">What does your fortune hold?</button>
<p id="output"></p>
<script src="3a.js"></script>
</body>
</html>
Ответ №2:
Я предполагаю, что Cookie-это одно из имен, которые противоречат именам, существующим в общем контексте. Дайте ему более индивидуальное название, например «FortuneCookie», и оно должно сработать.