![]() |
|
||||||||||
|
|||||
|
[+4 12.05.09]
Регистрация: Apr 2009
Сообщений: 23
|
Всем добрый день! Недавно изучал скролл многоуважаемого Walsh и наткнулся на строки, которые привели меня в некоторое замешательство, потому как я такого синтаксиса еще не видел. Объясните кто-нибудь, пожалуйста, что это такое и с чем его едят
pimp._y = pimp._y < pimp_start ? pimp_start : pimp._y > pimp_stop ? pimp_stop : pimp._y; А у Walsh вот так. Это как? Там же справа должна быть функция! |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 1,195
|
|
|
|||||
|
listener
|
1.Буквальный "перевод" строки
Цитата:
if (pimp._y < pimp_start) {
pimp._y = pimp_start;
} else {
if (pimp._y > pimp_stop) {
pimp._y = pimp_stop;
} else {
pimp._y = pimp._y;
}
}
2. В примере из хэлпа справа стоит анонимная функция. у Wolsh'a справа стоит ссылка на функцию, которая была объявлена где-то в коде как или как Ссылками вцелом удобнее пользоваться. Вобщем, такой вот стиль. Последний раз редактировалось alexcon314; 19.10.2009 в 16:01. |
|
|||||
|
[+4 12.05.09]
Регистрация: Apr 2009
Сообщений: 23
|
Спасибо Вам, добрые люди!
|
|
|||||
|
Интересный вопрос. В случае одного использования тернарного оператора все понятно. Но в коде Walsh'а их два. А если их два, то выполнение идет справа налево. Как выглядит аналог if/else в таком случае?
|
|
|||||
|
[+4 12.05.09]
Регистрация: Apr 2009
Сообщений: 23
|
По первому вопросу более или менее ясно. Немного порылся в инете, но так и не понял
зачем анонимная функция в данном примере? Почему надо писать scrolling, а не scrolling()? Тем более, что объявлялась она как И что самое ужасное, это то, что даже если прописать scrolling(), то оно так не работает! Вообщем кипят мои мозги... |
|
|||||
|
прописать можно или так или так. Но. в первом случае ты подразумеваешь просто название функции, ты и так знаешь, что вызвать так можно только функцию.
А в блоке function(){ } ты описываешь свои действия, выражения, и необязательно функции. Во втором примере можно написать более 1 выполняемой функции если нужно, в первом - только 1.
__________________
Если ты не часть решения, тогда ты – часть проблемы. Последний раз редактировалось .true; 19.10.2009 в 17:58. |
|
|||||
|
nikewist
Следующий код даёт ссылку на функцию scrolling() Если мы пишем scrolling(), то есть со скобочками, то мы либо объявляем её: Либо вызываем её: Когда мы пишем только название функции мы именно даём ссылку на неё. Если более дотошно, то, грубо говоря, следующий код: является аналогом вот такого, возможно более привычного Вам: |
|
|||||
|
[+4 12.05.09]
Регистрация: Apr 2009
Сообщений: 23
|
Фуууухххх...В принципе я понял. Понял, что вместо того, чтобы вызвать напрямую функцию, мы вызываем анонимную функцию, которая вызовет ту функцию, которая мне нужна. Действительно, так проще и удобнее
Вероятно, я отношусь к категории товарищей, которым надо пользоваться только if... Но если серьёзно, если мы вызываем анонимную функцию, которая фактически вызывает довольно определенную функцию, то зачем эти телодвижения, где логика, где рациональное зерно? В чем отличие в принципе работы. В математическом смысле. Потому что если я прописываю не ссылку на функцию, а напрямую вызываю функцию, то программа не работает...А с ссылкой работает. Работает, не работает, работает, не работает... ![]() |
|
|||||
|
Модрон-ветеринар
|
Автор, часто бывает удобнее задать для какого-то действия функцию, и ее вызывать из разных мест - например, либо по нажатию кнопки, либо по какому-то другому событию. Например.
function doIt() { //эта функция делает полупрозрачными сто объектов mc1....mc100 for (i = 1; i <= 100; i++) { _root['mc' + i]._alpha = 50; } } btn.onPress = doIt; //функция doIt сработает при нажатии на кнопку btn btn.onRelease = doIt; //функция doIt сработает также при отпускании кнопки btn text_tf.onChanged = doIt; //функция doIt сработает при вводе нового символа в текстовое поле text_tf //постоянно проверяем изменение триггера val, если = 1, также сработает функция doIt this.onEnterFrame = function() { if (val == 1) { doIt(); } } function goThere () { _root['mc' + this.num].gotoAndPlay(50); } for (i = 1; i <= 20; i++) { this['btn' + i].num = i; this['btn' + i].onRelease = goThere; } //this внутри функции goThere указывает на соответствующую кнопку, для которой данная функция работает, то есть btn1... btn20 //поэтому this.num тут будет равно последовательно btn1.num... btn20.num, то есть 1....20 function doOne () { trace('Делай раз!') } function doTwo () { trace('Делай два!') } //В одной части кода: btn.onRelease = doOne; .... //Где-то в другом месте, при других обстоятельствах, но для той же кнопки: btn.onRelease = doTwo; //либо: if (val == 0) { btn.onRelease = doOne; } else { btn.onRelease = doTwo; } И еще. Поймите простую вещь - вот здесь: в правой части не определяется никакая функция, а только для события onPress указываем ссылку на функцию doIt по ее имени. Эта запись сродни То есть присваиваем одной переменной ссылку на другую. Последний раз редактировалось mooncar; 20.10.2009 в 00:26. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|