Как Flash может сравнивать две текстовые поля (или любой компонент) переменной? - PullRequest
1 голос
/ 28 ноября 2011

Сравнение числа или строки понятно. Но как получилось, когда во flash AS3.0 мы делаем:

var a:TextField = new TextField(); 
var b:TextField = new TextField() ;
.....
.....
.....

if ( a==b)
{
......
}

сравнение делается?

Это какой-то идентификатор для всего приложения, который Flash дает каждому экземпляру компонента. Или это сравнение строк (сравнение всего пути каждого компонента)

спасибо V.

Ответы [ 3 ]

2 голосов
/ 29 ноября 2011

Когда вы создаете новый объект чего-либо, Flash резервирует некоторую память для этого места. Например, в моей воображаемой упрощенной среде выполнения флэш-памяти:

var a:Object = new Object();

Memory Dump:
0000: [Object 0]

a = 0000

Переменные похожи на указатель на область памяти.

Теперь Flash передает объекты по ссылке. Например:

function A(){
    var a:Object = new Object();
    var b = a;
}

Memory Dump:
0000: [Object 0]

FunctionA.a = 0000 /*These pointers are scoped to the function that declared it*/
FunctionA.b = 0000

Мы можем доказать это на следующем примере:

var a:MovieClip = new MovieClip;
var b = a;
b.graphics.lineStyle(1);
b.graphics.lineTo(100,100);
addChild(a);

В этом примере a и b - это одно и то же. Все, что сделано для a, будет сделано для b, потому что это одни и те же объекты.

Однако это не работает для строк, чисел (Number, int, uint), логических значений. Они являются исключениями, и они проходят значение .

function A(){
    var a:String = "Hello world.";
    var b = a + "Hi";
}

Memory Dump:
0000: [String "Hello world."];
0008: [String "Hello world.Hi"];

FunctionA.a = 0000;
FunctionA.b = 0000;

Чтобы ответить на ваш вопрос сейчас, вот что произойдет:

Memory Dump:
0000: [Object TextField 1]
0016: [Object TextField 2]

FunctionA.a = 0000; //This is var a = new TextField
FunctionA.b = 0016; //This is var b = new TextField
FunctionA.c = 0000; //This is like var c = a;

is the number 0000(a) the same as 0016(b)? No.
is the number 0000(a) the same as 0000(c)? Yes.

Теперь, если вы хотите увидеть, равен ли текст, тогда:

if (a.text == b.text) {

}

Это потому, что a.text является строкой, а со строками флэш-проверка выполняется не по адресу, а по значению.

Надеюсь, я не слишком усложнил все, и вы понимаете, почему: *

2 голосов
/ 28 ноября 2011

Сравнение ссылок ... в основном, ячейки памяти (номер ячейки памяти, на которые указывает ссылка) проверяются, если они одинаковы ... у кого-то еще должно быть время, чтобы дать более мясной ответ.

0 голосов
/ 29 ноября 2011

, если вы пытаетесь сравнить строковые значения.вы хотите сначала ссылаться на строку с помощью свойства .text.(a или b фактически ссылаются на само поле, а не на то, что там написано)

, затем вы хотите найти строку в другой строке, например:

if (b.text.indexOf.text)> 0) trace ("строка b точно такая же, как a);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...