Когда вы создаете новый объект чего-либо, 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 является строкой, а со строками флэш-проверка выполняется не по адресу, а по значению.
Надеюсь, я не слишком усложнил все, и вы понимаете, почему: *