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的字符串是完全一样的);
'-1'问题是问两个对象,每个对象的两个属性不是值之间的关系。 – Marty