我只是想知道什麼時候需要使用關鍵字this.somevar
而不是somevar
。as3:這個關鍵字的用法
我通常不會在下列情況下使用:
- 我已經做了VAR私人的一類
- 我指的是它爲了使用它作爲一個局部變量該類
是否正確?或者這不只是一種風格的東西?
我只是想知道什麼時候需要使用關鍵字this.somevar
而不是somevar
。as3:這個關鍵字的用法
我通常不會在下列情況下使用:
是否正確?或者這不只是一種風格的東西?
你一般只需要使用this.varname如果你有相同名稱參數的函數裏面,你想指成員變量。成員變量是否爲私有對於使用'this'沒有任何影響。
如果你在一個對象內部使用它,這將引用對象本身。下面是一個例子,你會使用它:
package
{
public class foo
{
private var variable:uint;
public function foo(variable:uint)
{
this.variable = variable;
}
}
}
我在說,我認爲這發生無論如何。 請參閱下面的評論;我發現它很有用。謝謝! – jml 2009-12-27 22:00:28
正如已經提到的,你不必在一個非常簡單的例子,你想從一個類的成員方法是指一類成員變量,例如使用這個:
public function myClassMethod() : void
{
// "this" is redundant here, as it is implied if omitted
this.myPrivateOrPublicVariable = 123;
}
請注意,有些情況下這個(它是在程序中遇到時評估的,而不是像人們可能猜到的那樣在實例化時評估)並不指向它所寫入的類。更具體地說,當你在一個函數中使用它時,會發生這種情況,該函數將使用諸如Function.apply()之類的方法進行調用。這種方法允許呼叫者指定將由這個引用的對象,並且它通常在回調中使用,例如,在補間引擎。
// Call myFunction(listOfArguments[0], listOfArguments[1] ...),
// with this referring to objectReferredToByThis.
myFunction.apply(objectReferredToByThis, listOfArguments);
下面是與流行的漸變引擎中間人,其中默認行爲是有這個指補間對象(即影片剪輯_mc),而不是類的實例的實例,其中本被寫入(即MyClass)。
package
{
/* ... imports ... */
public class MyClass extends Sprite
{
private var _mc : MovieClip;
public function tweenSomething() : void
{
var tween : Object = {
x: 0,
time: 1,
onComplete: function() : void {
// Here, "this" will not refer to the instance
// of MyClass, but rather to the _mc MovieClip,
// which is the object being tweened below.
this.visible = false;
}
};
Tweener.addTween(_mc, tween);
}
}
}
在上面的代碼,使用這是必要的,因爲我們要明確地指示運行時修改我們的影片剪輯(_mc)的可見狀態。如果我們沒有使用這個,可見的參考因爲函數關閉而會參考MyClass.visible。
感謝您進入這個細節。 我讚賞澄清。 – jml 2009-12-28 17:25:42
嗯,我不明白爲什麼在這個tweener例子。指的是動畫片段。 – Rihards 2010-08-13 04:12:47
@Richards,它的確如此,因爲調用者(在Tweener中)指定補間目標爲「this」變量引用。請參閱有關Function.apply()的文檔。乾杯 – richardolsson 2010-08-17 14:57:36
如何開始使用this
關鍵字,首先,它可以幫助您快速識別代碼中的變量local或global(方法或類擁有)。您只需要一段代碼即可看到this
,然後立即意識到這是一個全局可見的類變量,而不是目標定義的額外滾動。
東西添加到其他的答案:在ActionScript 3,可以參考成員變量和函數基本上有兩種方式:
// 1. the normal way
obj.var = 5;
obj.func();
// 2. the auxiliary way
obj["var"] = 5;
obj["func"]();
這看似毫無意義,但也有在某些情況下,例如,串聯字符串成各種組合使用隨機的,動態指定變量或函數中的對象可能是有用的,就像這樣:
private function someFunc():void
{
obj[randomFuncStr()]();
}
private function randomFuncStr():String
{
// randomly decide on a function to call and return its name as a String
}
但是如果你想使用字符串來訪問內部變量或函數是什麼?這不起作用:
"var" = 5; // error
"func"(); // error
所以,你需要做的,而不是這是什麼:
this["var"] = 5; // the this keyword is good for something after all!
this["func"](); // " " " " " " " " "
其他人已經提到這下原因,但我第一次帶着this.var
或this.func()
嚴重在AS3(我通常仍然看清楚它的用法和明顯的鄙視)是當我重寫UIComponent.setLayoutBoundsSize()
,它有一個名爲width
的參數和一個名爲height
的參數。 UIComponent也使用這些名稱作爲屬性,並且我不喜歡在重寫方法時更改參數名稱。所以說像this.width = x;
或this.height = y;
之類的東西突然變得相關。除了這兩種情況,我認爲沒有理由在內部引用同一對象內的變量或函數時使用this
。作爲一個側面說明,如果你不得不這樣做,因爲API的構建方式或者其他一些非常好的理由(儘量避免像這樣設置),偶爾你可能會將this
作爲參數傳遞給函數或需要引用回調用對象的東西。
謝謝。這清除了我希望找到的東西。 – jml 2009-12-27 22:02:20