0

共有オブジェクト (データを保存するオブジェクト) を参照しようとしていますが、参照しようとするとクラッシュします。

このコードは正常に動作します:

var var1:Object = { value:1 };
var varRef:Object = var1;

if(var1.value == 1) {
    varRef.value = 50;
}

trace(varRef.value); // outputs 50;
trace(var1.value); // outputs 50;

しかし、共有オブジェクトを使用しようとすると、うまくいきません。

import flash.net.SharedObject;
var iapso:SharedObject = SharedObject.getLocal("purchases");
var varRef:Object = iapso.data.testing;

varRef = 90
trace ("The shared value is " + iapso.data.testing);
trace ("This should mirror it" + varRef);

問題を解決できる場合は、修正版を投稿してください。

ありがとう。

4

2 に答える 2

4

ポインターを逆参照できるプログラミングのバックグラウンドを持っている必要があります。

この場合、 でvarRefはありませんvarRef = &iapso。その値を設定しても、の値は変更されませんiapso.data.testing

最初に、次varRefへのポインターとして設定しますiapso.data.testing

var varRef:Object = iapso.data.testing;

次に、すぐに定数値オブジェクト リテラルに変更します90

varRef = 90;

testingこれは の値を 90に設定しません- これは の値を変更しますvarRef

varRefに設定してからiapso.data、次のように設定できますtesting

var varRef:Object = iapso.data;
varRef.testing = 90;

次に、次のようにすると、期待どおりの結果が得られます。

trace(iapso.data.testing); // 90
trace(varRef.testing); // 90
于 2012-07-09T06:53:20.237 に答える
2

varRef を設定しても、iapso.data の値は更新されません。数値は参照されずにコピーされます。

var bar:Object = { data:1 };
var foo:Object = bar.data;

trace(foo); //"1"
bar.data = 2;
trace(foo); //"1"

本当に参照を使用したい場合は、data代わりに次のように使用します。

import flash.net.SharedObject;
var iapso:SharedObject = SharedObject.getLocal("purchases");
var varRef:Object = iapso.data;

varRef.testing = 90
trace ("The shared value is " + iapso.data.testing);
trace ("This should mirror it" + varRef.testing);
于 2012-07-09T06:53:28.880 に答える