#javascript #prototype
#javascript #прототип
Вопрос:
Простая программа на javascript, позволяющая показать, какой прямоугольник имеет больший периметр при нажатии кнопки, но прямоугольник.Периметр, похоже, не получает необходимого значения от объекта Rectangle для ширины и высоты. Он просто печатает NaN вместо периметра.
<script>
function Rectangle(width, height) {
this.width = width;
this.height = height;
}
var Rectangle1 = new Rectangle(2, 4);
var Rectangle2 = new Rectangle(8.5, 11);
Rectangle.prototype.PrintRectangle = function () {
document.getElementById("p1").innerHTML = "Rectangle width is " this.width " and Rectangle height is " this.height;
};
Rectangle.prototype.RectanglePerimeter = this.width*2 this.height*2;
function calculate() {
if(Rectangle1.RectanglePerimeter > Rectangle2.RectanglePerimeter){
document.getElementById("perimetar").innerHTML = "The biggest Rectangle has perimeter of " Rectangle1.RectanglePerimeter;
}else{
document.getElementById("perimetar").innerHTML = "The biggest Rectangle has perimeter of " Rectangle2.RectanglePerimeter;
}
}
</script>
<body>
<p><b>Paragraph no: 1</b></p>
<p id="p1" onload="Rectangle1.PrintRectangle()"></p>
<button id="button" onclick="calculate()">Calculate Perimeter</button>
<p id="perimetar"></p>
</body>
Комментарии:
1. На что
Rectangle.prototype.RectanglePerimeter
ссылается,this
когда вы создаете?2. Я думаю, вы имели в виду создать
RectanglePerimeter
функцию.3. Дело в том, что когда я вызываю Rectangle1.RectanglePerimeter, я хочу, чтобы он ссылался на ширину и высоту Rectangle1, вызываемые отсюда var Rectangle1 = new Rectangle2(2, 4); По-видимому, я не знаю, как это сделать :))
Ответ №1:
Rectangle.prototype.getPerimeter = function() {
return this.width*2 this.height*2;
};
и затем используйте
if(Rectangle1.getPerimeter() > Rectangle2.getPerimeter())
Комментарии:
1. Это работает, но фактической проблемой в моем коде был тот факт, что имя моей функции начинается с заглавной буквы?! Как только я изменил Rectangle.prototype. RectanglePerimeter = это. ширина*2 это. высота *2;
2. Это работает, но фактической проблемой в моем коде был тот факт, что название функций начиналось с заглавной буквы. Я только что изменил Rectangle.prototype. RectanglePerimeter = это. ширина*2 это. высота *2; для Rectangle.prototype.rectanglePerimeter = this. ширина*2 это. высота * 2; и он начал работать………. Каким-то образом это не может быть отнесено к объекту, если функция objects начинается с заглавной буквы
3. просто замените
Rectangle.prototype.getPerimeter
свое оригинальное имя:Rectangle.prototype.RectanglePerimeter