#javascript
#javascript
Вопрос:
У меня есть следующий простой скрипт на странице
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript">
var nsTest = function ()
{
var test = function ()
{
alert('nsTest.test');
}
var test2 = function ()
{
alert('nsTest.test2');
}
return {
test: test,
test2: test2
}
} ();
function t()
{
alert(nsTest.test());
}
function t2()
{
alert(nsTest.test2());
}
</script>
</head>
<body>
<input type="button" value="test" onclick="t()" />
<input type="button" value="test2" onclick="t2()" />
</body>
</html>
Когда я нажимаю на любую из кнопок, я вижу ожидаемое предупреждение на экране, а затем второе предупреждение с надписью «не определено».
Это происходит в IE8 и FF3. Есть идеи, что происходит?
Спасибо,
Дэвид
Ответ №1:
Вы дважды произносите предупреждение. Вам не нужно говорить
оповещение (nsTest.test2());
вам просто нужно вызвать nsTest.test2();
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript">
var nsTest = function ()
{
var test = function ()
{
alert('nsTest.test');
}
var test2 = function ()
{
alert('nsTest.test2');
}
return {
test: test,
test2: test2
}
}();
function t()
{
nsTest.test();
}
function t2()
{
nsTest.test2();
}
</script>
</head>
<body>
<input type="button" value="test" onclick="t()" />
<input type="button" value="test2" onclick="t2()" />
</body>
</html>
На самом деле вам даже не нужны функции t1 и t2, вы можете просто использовать ссылку onclick на nsTest.test2() напрямую, как показано здесьhttp://jsbin.com/ageva5/2/edit
Комментарии:
1. Насколько глупо я себя чувствую сейчас? Так очевидно, когда на это указывают! Спасибо Daveo
Ответ №2:
Вы вызываете, t()
который вызывает nsTest.test()
…
nsTest.test()
предупреждает строку 'nsTest.test'
, а затем не имеет возвращаемого значения, поэтому возвращает undefined
.
… t()
затем получает возвращаемое значение и предупреждает о нем.
Ответ №3:
Сначала запускаются оповещения в nsTest, затем запускаются оповещения в t () и t2 (). Эти предупреждения предупреждают о возвращаемом значении nsTest.*. Эти значения не определены. Удалите эти предупреждения, чтобы получить только первое предупреждение.