Хочу понять применение 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> |
Цитата:
|
Да, пробовал!
Можете объяснить? |
:-?
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> </head> <body> <script> function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); } function Calculator() { this.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(!this.methods[op] || !isNumeric(a) || !isNumeric(b)) { return NaN; } return this.methods[op](+a, +b); } this.addMethod = function(name, func) { this.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> |
Спасибо большое! Так и делал, как вы, видимо была неточность!
А можете объяснить, почему в примере используется var methods? И ещё: при создании объекта calc где находится var methods.. в объекте calc? |
Цитата:
Цитата:
Эт такой способ сделать приватные свойства объекта в JS. Цитата:
![]() |
danik.js,
:thanks: с картинками оно интереснее -- скопировать код - запустить локально -- поискать в Sources консоли -- поставить брекпоинт на первом применении метода и справа развернуть Scope - тока бы незабыть --- хмм только у меня никаких точек .......... в консоли нет? |
Цитата:
Еще можно в коде прям прописать директиву debugger;, и тогда, при выполнении кода, отладчик автоматически поставится на паузу на строке с директивой. рони, разобравшись с отладчиком, тебе станет в разы проще работать с кодом. Помню свой восторг, когда осознал всю силу отладчика :) |
danik.js,
на скриншоте во всех строках кода точки например последняя строка........} Цитата:
|
рони, это пробелы отображаются.
Settings (правый нижний угол - шестерня) -> General -> Sources -> Show whitespace characters |
Часовой пояс GMT +3, время: 19:47. |