Справочник по Flash : ActionScript : Action : with - Выполняет некоторый код в конце указанного объекта
Материал из Справочник Web-языков.
| Главная | ::. | Flash | ::. | ActionScript | ::. | Action | ::. | with - Выполняет некоторый код в конце указанного объекта |
[править] with
Предоставляет сокращенный способ обращения к свойствам объекта.
[править] Синтаксис:
with (object) {
statements;
}
[править] Аргументы:
- object
- Экземпляр ActionScript объекта или мувиклипа.
- statements
- Команда или группа команд, заключенных в фигурные скобки.
[править] Описание:
Если обращение к свойству происходит в блоке предложений with, проверяется наличие этого свойства у объекта object. Если у object существует указанное свойство, то оно и используется для разрешения ссылки на свойство. Если у object нет такого свойства, оно ищется в текущей временной диаграмме или функции.
[править] Примеры:
Следующий пример демонстрирует разницу между выполнением предложения внутри with и вне with:
PI = 10; // Задать переменную временной диаграммы, PI
with (Math) { // Выполнить предложения в контексте Math
trace("pi is: " + PI); // Выводит: 3.1459 (PI - свойство Math)
}
trace("pi is: " + PI); // Выводит: 10 (Обращение к Math больше нет)
Помимо предоставления удобного доступа к свойствам объекта, with может использоваться для вызова методов объекта:
x = 10;
y = 11;
with (Math) {
larget = max(x, y);
}
trace(larget); // Выводит: 11
Нельзя определять новое свойство объекта, являющегося целью предложения with. Обратите внимание в предыдущем примере на то, что переменная larget не определена в объекте Math, поэтому ссылка на свойство воздействует на временную диаграмму или функцию, содержащую предложение with.
Следующий код показывает неверную попытку присвоить переменной значение myClip:
with (myClip) {
var x = 10; // значение x задается в текущей временной диаграмме,
// а не в myClip
}
Можно, однако, с полным правом использовать with для воздействия на экземпляры клипов другими способами. Это предложение предоставляет удобный способ работы с глубоко вложенными структурами экземпляров.
Например, следующий код:
_root.form.userProfile.userID = "34R56";
_root.form.userProfile.gotoAndPlay("guestionnaire");
можно заменить таким:
with (_root.form.userProfile) {
userID = "34R56";
gotoAndPlay("guestionnaire");
}
Но with не является единственным способом обеспечения такого удобства. Можно просто присвоить наш экземпляр переменной и использовать эту переменную в ссылках:
var userForm = _root.form.userProfile;
userForm.userID = "34R56";
userForm.gotoAndPlay("guestionnaire");
Следующий пример устанавливает свойства x и y экземпляра someOtherMovieClip и затем командует ему перейти на третий кадр и остановиться:
with (someOtherMovieClip) {
_x = 50;
_y = 100;
gotoAndStop(3);
}
Следующий отрывок кода показывает, как можно написать предшествующий пример без использования команды with:
someOtherMovieClip._x = 50; someOtherMovieClip._y = 100; someOtherMovieClip.gotoAndStop(3);
Этот код также можно написать с использованием команды tellTarget:
tellTarget ("someOtherMovieClip") {
_x = 50;
_y = 100;
gotoAndStop(3);
}
Использование команды with полезно для одновременного вызова многих элементов в контекстном листе. В следующем примере встроенный объект Math помещен в начало объектной области (контекста). Установка Math, как объекта по умолчанию, приводит идентификаторы cos, sin и PI к Math.cos, Math.sin и Math.PI соответственно. Идентификаторы a, x, y и r - не методы или свойства объекта Math, но так как они существуют в объектной области (контексте) функции polar, они приводятся к к соответствующим локальным переменным.
function polar(r){
var a, x, y
with (Math) {
a = PI * r * r
x = r * cos(PI)
y = r * sin(PI/2)
}
trace("area = " +a)
trace("x = " + x)
trace("y = " + y)
}
Возможно использование вложенных команд with для доступа к информации во многих контекстных областях. В следующем примере экземпляры fresno и salinas являются дочерними по отношению к california. Оператор устанавливает значения _alpha для fresno и salinas без изменения значения _alpha у california.
with (california){
with (fresno){
_alpha = 20;
}
with (salinas){
_alpha = 40;
}
}
[править] Совместимость:
Используется с 4-ой версии Flash
