这段代码做了什么?我的意思是特别与原型部分。链对象传入时是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;
}
这是CSSStyleDeclaration类了Flex SDK 4.6
对于上下文的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) // ???
什么呢链平等的吗?
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ UPDATE ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~
基于低于这个答案是什么,是怎么回事:
// 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。查看上面的示例代码和返回值。
所以它的属性和方法,以现有的类添加或替换现有的类?如果它在新属性中合并,那么该方法是否已经存在?写完了吗? –
我认为它可以替代现有的类,但不是真的。它取代了定义现有类的定义,以及实现该类的对象的含义。是的,你可以覆盖现有的方法。我相信这个术语是“超载”的方法。 – invertedSpear