2016-03-05 3 views
-3

index.html:Я не понимаю, как это простой Javascript функция работает

<html> 
<head> 
<script src="foo2.js"></script> 
</head> 

<script> 
var foo2 = new foo2(); 
foo2.printThis = function (input){ 
    console.log("done"); 
} 

</script> 
</html> 

foo2.js:

function foo2(){  
    this.printThis = function (input){ 
     console.log(input); 
    } 
} 

Я думал, как foo2 предполагается использовать, как это:

var foo2 = new foo2(); 
foo2.printThis("hello"); 

но в моем index.html, например, "foo2.printThis" будет равен новому fucntion. Что это значит, что это называется, почему бы вам определить такую ​​функцию и как вы ее используете? У меня есть фон Java, и это не имеет для меня никакого смысла.

+0

Похоже на попытку создания [пользовательского объекта] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript#Custom_objects). –

+0

Могу я спросить вас, где находится _body_ вашего документа? – Lends

ответ

1

Сценарий в foo2.js определяет функцию-конструктор, называемую foo2, которая добавляет в его экземпляры метод с именем printThis.

Скрипт incline создает экземпляр этого конструктора и изменяет значение глобальной переменной foo2 как экземпляр вместо конструктора.

Затем он заменяет метод экземпляра (определенный в конструкторе) printThis на несколько иной метод.

Это не имеет большого смысла, но вы можете это сделать, да.

+0

Как «вход» передается в новую функцию foo2.printThis в index.html? –

+0

@DarkNight После замены метода 'printThis' новая функция полностью игнорирует переданные аргументы. Вы можете использовать 'foo2.printThis (« Я проигнорирован »)', если вы хотите. – Oriol

+0

В моем локальном примере (который имеет больше строк, чем то, что я предоставил), 'input' не передается вновь созданной функции в любом месте в' index.html'. Но 'foo2.printThis' имеет выход. Как передается «ввод»? это мой вопрос. –

0

В коде index.html действительно переопределяется printThis для конкретного экземпляра объекта foo2.

var foo2 = new foo2(); 
foo2.printThis = function (input){ 
    console.log(input +" I am in index"); 
} 

foo2.printThis('test'); //print > test I am in index 

var foo3 = new foo2(); 
foo3.printThis('test'); //print > test (as implemented in foo) 
+0

В моем локальном примере (который имеет больше строк, чем то, что я предоставил), 'input' не передается вновь созданной функции в любом месте в' index.html'. Но 'foo2.printThis' имеет выход. Как передается «ввод»? –

+0

Можете вы добавить код, в котором хотите позвонить? –

0

В JavaScript функции похожи на исполняемые переменные. Разница между ссылкой на функцию как переменной и выполнением функции - (). Когда вы сделали

foo2.printThis = function (input){ 
    console.log("done"); 
} 

Вы переопределены функцию printThis. Но когда вы сделали

foo2.printThis("hello"); 

Вы выполнили функцию и распечатали ее на пульте.

+0

В моем локальном примере (который имеет больше строк, чем то, что я предоставил), 'input' не передается вновь созданной функции в любом месте в' index.html'. Но 'foo2.printThis' имеет выход. Как передается «ввод»? это мой вопрос. –

+0

Когда вы игнорируете параметр в JavaScript, он устанавливает значение параметра 'undefined' и не выдает ошибку, если этот параметр никогда не используется в этой функции. Вы переопределили 'foo2.printThis' так, чтобы этот параметр больше не использовался в функции, поэтому параметр становится необязательным, и он будет печатать' 'done '' независимо от того, что вы передаете ему. Это помогает? – 4castle

+0

Предположим, что функция выполняет вход и вместо того, чтобы печатать '' done'', выводит входные данные. В этот момент, откуда поступает вход? –