このコードは何をしますか? 具体的にはプロトタイプの部分です。渡されるチェーン オブジェクトは、CSS の名前と値のペアのオブジェクトです。defaultFactory は名前と値のペアを持つオブジェクトを返すと思います。私が知らないのは、プロトタイプの設定が何をするかです。
function addDefaultStyleToProtoChain(chain):Object {
// If there's a defaultFactory for this style sheet,
// then add the object it produces to the chain.
if (defaultFactory != null)
{
var originalChain:Object = chain;
// from here on...
defaultFactory.prototype = chain;
chain = new defaultFactory();
defaultFactory.prototype = null;
}
return chain;
}
これは、Flex 4.6 SDK の CSSStyleDeclaration クラスの addDefaultStyleToProtoChain メソッドにあります。
コンテキストについては、次の場合はどうでしょう。
var o:Object = new defaultFactory();
trace(o) // {fontFamily:Arial, color:blue};
trace(chain) // {color:red, fontWeight:bold}
defaultFactory.prototype = chain;
chain = new defaultFactory();
trace(chain) // ???
チェーンとは何ですか?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ 更新 ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~
以下の回答に基づいて、これは何が起こっているかです:
// create a function that returns an object
var myDynamicDefinition:Function = function() {
this.name = "initialvalue";
trace('this.name='+this.name); // returns this.name=initialvalue
}
var dynamicDefinitionInstance = new myDynamicDefinition(); // create an instance of myDynamicDefinition
trace(ObjectUtil.toString(dynamicDefinitionInstance));// returns name = "initialvalue"
// create a new definition and assign it to our dynamic definitions
var newDefinition = {color:"red", name:"newObjectValue"};
myDynamicDefinition.prototype = newDefinition;
// create a new instance with new definition
var dynamicDefinitionInstance2 = new myDynamicDefinition(); // create an instance of myDynamicDefinition
trace(ObjectUtil.toString(dynamicDefinitionInstance2)); // returns name = "initialvalue" color = "red"
// delete name property instance
delete dynamicDefinitionInstance2.name;
trace(ObjectUtil.toString(dynamicDefinitionInstance2)); // returns name = "newObjectValue" color = "red"
// set prototype to null
myDynamicDefinition.prototype = null;
// create a new instance
var dynamicDefinitionInstance3 = new myDynamicDefinition();
trace(ObjectUtil.toString(dynamicDefinitionInstance2)); // returns name = "newObjectValue" color = "red"
プロトタイプ オブジェクトが同じ名前のプロパティを含むオブジェクトに設定されている場合、新しいインスタンスのプロパティ値は、新しいインスタンスの作成後に変更されないように見えます。だから最初から変わらない。そのプロパティが削除されると、プロトタイプ オブジェクトの値が FALLBACK として使用されます。上記のコード例と戻り値を参照してください。