метод прототипа javascript

#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