引用:
うわ…さらに分からなくなりました
値型と参照型とかいうやつでしょうか?
上の場合、参照型?のような感じですけど
はやくも挫折しそうです
野中さんが解説されてるのにいまさらなんですが(^^l
あるところに小学校があって、そこの1年3組のことを
Aさんは
「息子のクラス」
Bさんは
「娘のクラス」
と呼んでいるとします。
//
A.息子クラス=1年3組;
B.娘クラス =1年3組;
//
ここでAさんは息子のクラスに転校生が一人入ってきた事を聞きました。
//
A.息子クラス.転校生一人入る;
//
するとBさんの娘のクラスも人数が一人増えてしまっている。
オブジェクトや配列を参照しているというのもAさんやBさんが
同じ1年3組のことを「息子のクラス」、「娘のクラス」等と呼んでいるのと同じようなことです。。。
こんな説明じゃだめすか?(^^l
後は、protoypeや__proto__についての関係なんですが、
ASには__resolveという、そのオブジェクトに存在しないプロパティを
呼び出そうとしたときに呼び出されるメソッドがあります。
obj = new Object();
obj.__resolve = function(mes){
trace(mes);
}
obj.unknownProperty();
//unknownProperty
これを使って考えると、もし?かしたらprototypeや__proto__の関係が
すんなり解るかもしれません、ややこしそうなら飛ばして下さい。
//ProtoExample.as
dynamic class ProtoExample{
//__proto__をシュミレートするObject _proto
var _proto:Object;
function ProtoExample(proto:Object){
_proto = proto;
}
//もしProtoExampleのインスタンスに無いプロパティが呼び出されたら呼ばれる
function __resolve(prop:String){
//引数にはいってきたものと同名のプロパティを_protoから探す
var f = _proto[prop];
//それがFunctionなら関数として返す。
if( typeof f== "Function")
return f.apply(this,arguments);
return f;
}
}
//example:
PROTOTYPE = new Object();
PROTOTYPE.prop = "prototypeProperty";
PROTOTYPE.datas = [1,2,3,4,5];
var obj1:ProtoExample = new ProtoExample(PROTOTYPE);
var obj2:ProtoExample = new ProtoExample(PROTOTYPE);
trace([obj1.prop,obj2.prop]);
//ex:obj1.prop = "instanceProperty";
obj1.prop = "instanceProperty";
trace([obj1.prop,obj2.prop]);
//ex: obj1.__proto__.prop = "OOps...";
obj1._proto.prop = "OOps...";
trace([obj1.prop,obj2.prop]);
trace([obj1.datas,obj2.datas]);
obj1.datas[0] = "X";
trace([obj1.datas,obj2.datas]);
----------------
- yo