Ответ 1:
Вы добавили функцию «Журнал» в «это». Вот почему вы должны создать объект из консольной функции, прежде чем сможете получить к нему доступ.
Когда вы выполняете Console (). Log (), вы пытаетесь запустить консольную функцию и вызвать метод 'Log' для возвращаемого объекта. Поскольку консольная функция ничего не возвращает, она не определена и, следовательно, вы не можете получить доступ к методу Log.
Ответ 2:
«Регистратор» - это не функция, а результат вывода анонимной функции.
E.g. var logger = function() { //your code; } ();
Ваша анонимная функция ничего не возвращает, поэтому регистратор будет «неопределенным». А для неопределенного объекта не существует метода 'log'.
Чтобы решить эту проблему, сделайте следующее:
var logger = function() {
var output = {};
output.log = function(msg) {
new Console().Log(msg);
new Console().Log("log initialized");
}
output.log2 = function(msg) {
new Console().Log(msg);
new Console().Log("log2 initialized");
}
return output;
}();
To use, you can write,
logger.log('hello');
Основные сведения о функции и создании объектов в JS
Главное, что вам нужно понять, это то, что в JavaScript обычная функция действует как «конструктор» при вызове с ключевым словом «new».
Рассмотрим следующую функцию.
function Console()
{
this['name'] = 'Console'
}
Когда вы вызываете вышеуказанную функцию,
Console();
alert(window.name); //alerts 'Console';
'this' будет объектом 'window' и добавит свойство 'name' со значением 'Console'.
Если вы вызываете вышеуказанную функцию, как,
var output = new Console();
alert(output.name) // alerts 'Console'
JavaScript создаст новый объект, доступный через «this» внутри «Console». Теперь вывод будет иметь свойство name.
Дайте мне знать, если вышесказанное не прояснит для вас вещи. Важно, чтобы вы понимали, что вы можете воспользоваться тем, что предлагает JS.