2016-10-23 185 views
-1

简单的javascript程序来显示单击按钮时哪个矩形具有较大的周长,但Rectangle.Perimeter似乎没有从矩形对象的宽度和高度获得所需的值。它只是打印NaN而不是周界。javascript原型方法

<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'指什么? – Blender

+1

我想你的意思是让'RectanglePerimeter'成为一个函数。 – 4castle

+0

事情是,当我打电话给Rectangle1.RectanglePerimeter时,我希望它引用Rectangle1的宽度和高度,从这里调用 var Rectangle1 = new Rectangle(2,4); 显然我不知道该怎么做:)) –

回答

0
Rectangle.prototype.getPerimeter = function() { 
    return this.width*2 + this.height*2; 
}; 

然后用

if(Rectangle1.getPerimeter() > Rectangle2.getPerimeter()) 
+0

这有效,但在我的代码中的实际问题是,我的函数名称以大写字母开头?只要我改变了 Rectangle.prototype.RectanglePerimeter = this.width * 2 + this.height * 2; –

+0

这有效,但我的代码中的实际问题是,函数名称以大写字母开头。 我刚换了 Rectangle.prototype.RectanglePerimeter = this.width * 2 + this.height * 2; 至 Rectangle.prototype.rectanglePerimeter = this.width * 2 + this.height * 2; 并且它开始工作..........不知何故,如果对象函数以大写字母 –

+0

开头,则只能用原始名称'Rectangle'替换'Rectangle.prototype.getPerimeter'。 prototype.RectanglePerimeter' – nicovank