2011-11-28 45 views
1

比較數字或字符串是可以理解的。但是如何在閃光燈AS3.0時,我們這樣做:Flash如何能夠比較兩個文本字段(或任何組件)變量?

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

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

比較正在做?

是他們的一些應用程序範圍的ID,即閃光燈給每個組件實例。或者是它的琴絃compairson(比較每個部件的整個路徑)

感謝 五

回答

2

當您創建的任何新對象時,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是一個字符串,並用繩子,閃存檢查不是由地道,但有價值。

我希望我不是太複雜了整個事情,你明白爲什麼:)

2

參考比較...基本存儲單元(存儲位置數量的參照點)進行檢查,如果他們是一樣的......別人應該有時間給出更肉體的答案。

-1

如果您嘗試比較字符串值。你想先引用帶有.text屬性的字符串。 (A或B實際引用領域本身,而不是什麼寫有)

那麼你想在另一個字符串這樣對搜索的字符串:

如果(b.text.indexOf(a.text)> 0)跟蹤(「b的字符串是完全一樣的);

+0

'-1'問題是問兩個對象,每個對象的兩個屬性不是值之間的關係。 – Marty