Показать сообщение отдельно
  #1 (permalink)  
Старый 29.01.2014, 21:00
Интересующийся
Отправить личное сообщение для cherrypashka Посмотреть профиль Найти все сообщения от cherrypashka
 
Регистрация: 29.01.2014
Сообщений: 22

Хочу понять применение this в функциях-конструкторах
Здравствуйте!

Объясните, пожалуйста, почему мы не можем в след. коде к объекту methods применить this.methods, а не var.. Хочу разобраться, чтобы появилось понимание логики!

<!DOCTYPE HTML>
<html>
<head>
	<meta charset="utf-8">
</head>
<body>
	
	<script>

	function isNumeric(n) {
		return !isNaN(parseFloat(n)) && isFinite(n);
	}

	function Calculator() {

		var methods = {
			"-": function(a, b) {
				return a - b;
			},
			"+": function(a, b) {
				return a + b;
			}
		};

		this.calculate = function(str) {

			var split = str.split(' '),
				a = split[0],
				op = split[1],
				b = split[2]

			if(!methods[op] || !isNumeric(a) || !isNumeric(b)) {
				return NaN;
			}

			return methods[op](+a, +b);
		}

		this.addMethod = function(name, func) {
			methods[name] = func;
		};
	}
	var calc = new Calculator;

	calc.addMethod("*", function(a, b) {
		return a * b;
	});
	calc.addMethod("/", function(a, b) {
		return a / b;
	});
	calc.addMethod("**", function(a, b) {
		return Math.pow(a, b);
	});

	var result = calc.calculate("2 ** 3");
	alert(result); // 8
	

	</script>
	
</body>
</html>
Ответить с цитированием