Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Магия с конструктором Number() (https://javascript.ru/forum/misc/62382-magiya-s-konstruktorom-number.html)

scv 07.04.2016 22:05

Магия с конструктором 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! Ума не приложу... При этом скрипты расчета площади круга и квадрата, организованные точно таким же образом, работают нормально и без конструктора! Люди, помогите пожалуйста!!:help:

рони 07.04.2016 22:28

scv,
Цитата:

Сообщение от scv
значения из полей ввода

строки!!! строки при сложении соединяются "1" + "2" = "12"

scv 07.04.2016 22:57

Батюшки-Матушки... На типах погорел)) :lol: Спасибо!


Часовой пояс GMT +3, время: 11:56.