Flash如何能够比较两个文本字段(或任何组件)变量?

问题描述:

比较数字或字符串是可以理解的。但是如何在闪光灯AS3.0时,我们这样做:Flash如何能够比较两个文本字段(或任何组件)变量?

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

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

比较正在做?

是他们的一些应用程序范围的ID,即闪光灯给每个组件实例。或者是它的琴弦compairson(比较每个部件的整个路径)

感谢 五

当您创建的任何新对象时,Flash将保留对地方一些内存例如,在我的想象中简单的Flash运行时环境。

var a:Object = new Object(); 

Memory Dump: 
0000: [Object 0] 

a = 0000 

变量就像一个指向内存locat的指针离子。

现在,闪存通过引用传递对象。例如:

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是相同的东西。对b做任何事情都会做,因为它们是相同的对象。

但是,这不适用于字符串,数字(数字,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. 

现在,如果你想看看如果文本相等,则:

如果(a.text = = b.text){

}

这是因为a.text是一个字符串,并用绳子,闪存检查不是由地道,但有价值。

我希望我不是太复杂了整个事情,你明白为什么:)

参考比较...基本存储单元(存储位置数量的参照点)进行检查,如果他们是一样的......别人应该有时间给出更肉体的答案。

如果您尝试比较字符串值。你想先引用带有.text属性的字符串。 (A或B实际引用领域本身,而不是什么写有)

那么你想在另一个字符串这样对搜索的字符串:

如果(b.text.indexOf(a.text)> 0)跟踪(“b的字符串是完全一样的);

+0

'-1'问题是问两个对象,每个对象的两个属性不是值之间的关系。 – Marty