Показать сообщение отдельно
  #1 (permalink)  
Старый 07.04.2016, 22:05
Аватар для scv
scv scv вне форума
Новичок на форуме
Отправить личное сообщение для scv Посмотреть профиль Найти все сообщения от scv
 
Регистрация: 02.04.2016
Сообщений: 6

Магия с конструктором Number()
Делаю калькулятор, рассчитывающий площади фигур.

Морда:
<div id="triangle">
	<h1>Calculate area of triangle</h1>

	<label for="ta">a</label>
	<input id="ta" type="number">

	<label for="tb">b</label>
	<input id="tb" type="number">

	<label for="tc">c</label>
	<input id="tc" type="number">

	<button id="calc-t">calculate</button>
	<button id="clear-t">clear</button>

	<span id="AoT"></span>
</div>


Конструктор объекта "треугольник":
function Triangle(a, b, c) {
*!*
        this.side1 = Number(a), // Длинна 1 стороны
        this.side2 = Number(b), // Длинна 2 стороны
        this.side3 = Number(c), // Длинна 3 стороны
*/!*
	Triangle.prototype.p = function() {
		with(this) {
			return (side1 + side2 + side3) / 2} // Полупериметр
		},

		Triangle.prototype.s = function() {
			with(this) {
				return Math.sqrt(p() * (p() - side1) * (p() - side2) * (p() - side3)) // Площадь
		}
	}


Скрипт берет значения из полей ввода с id "ta", "tb" и "tc".
При нажатии на кнопку "calculate" происходит валидация и непосредственно расчет (обращение к методу Triangle.prototype.s). В таком виде все адекватно работает, но если убрать конструктор Number() получаются бредовые пятизначные числа! Например площадь треугольника со сторонами 2, 2, 1 = 0,97. Но если просто убрать из кода конструктор Number(), т.е. написать не "this.side1 = Number(a)", a "this.side1 = a" и т.д., то получается 11934.88! Ума не приложу... При этом скрипты расчета площади круга и квадрата, организованные точно таким же образом, работают нормально и без конструктора! Люди, помогите пожалуйста!!
Ответить с цитированием