这是一个非常基本的问题,我确信在某个地方有答案,但对于我的生活,我找不到它。无论如何,我有很多变量要更改一个对象的新实例,为了大多数的乐趣,我想我会尝试缩短语法或将它链接在一起。但我不能。这是一些示例代码:
var text = new TextObjectThing(0, 0, 500, "Text");
text.color = 0xFFFFFFFF;
text.size = 26;
text.scrollFactor.x = 0;
text.scrollFactor.y = 0;
你可以看到你必须多次做“text.property”这件事。这在实际意义上很好,但我只是想知道是否有人知道如何重新组织这一点。
编辑:我想如果您因某些原因需要/需要匿名对象,这将非常重要。如果它是匿名的,你不能设置那些变量。答案 0 :(得分:3)
您可以使用技巧链接调用而无需修改您的对象:
var shape : Shape = new Shape;
// Chain property init
Initializer.init(shape).x(100).y(100).alpha(.5);
// Chain function call
Initializer.init(shape.graphics).beginFill( 0xFF0000 ).drawCircle( 100, 100, 50).endFill().beginFill( 0xFFFFFF ).drawCircle( 100, 100, 10).endFill();
addChild(shape);
初始化类:
package
{
import flash.utils.Proxy;
import flash.utils.flash_proxy;
public dynamic class Initializer extends Proxy
{
// To avoid new instance
private static var _instance : Initializer = new Initializer(null);;
// Current target Object
private var _target : Object;
// Constructor
public function Initializer(target : Object){
_target = target;
}
// Call it to avoid new Initizer instance
public static function init(target : Object) : Initializer{
_instance._target = target;
return _instance;
}
// Catch function call and return initializer to chain call
override flash_proxy function callProperty(name:*, ... rest):* {
if(_target)
{
// Emulate function setter
if(_target.hasOwnProperty(name) && !(_target[name] is Function))
_target[name] = rest[0];
// If not a property, call as a classic function
else
_target[name].apply(_target, rest);
}
return this;
}
}
}
这只是为了好玩,因为代理呼叫为每个呼叫添加一个非常短的时间,如果你想经常使用它(例如:每帧10000),使用经典方法会更快。
您也可以使用“with”关键字(请注意构造函数后面的; char):
var tf : TextField = new TextField(); with(tf) {
text = "Hello";
alpha = .5;
setTextFormat( new TextFormat( "Verdana", 16, 0xFF0000) );
}
或者当值相同时链:
var text = new TextObjectThing(0, 0, 500, "Text");
text.scrollFactor.x = text.scrollFactor.y = 0;
答案 1 :(得分:1)
如果你让方法返回,你可以链接它。
public method setColor(hex:uint):this
public method setSize(size:Number):this
然后你可以制作
text.setColor(0xFFFFFF).setSize(26);
你也可以创建一个带有许多参数的方法,并保持默认参数不变
答案 2 :(得分:0)
您可以将相关属性组织为一个新的数据结构。
例如flash.text.TextFormat。它包含可以在文本中使用的属性。
您可以传递数据结构对象而不是几个单独的属性。它将使您的代码更简单,更清晰。例如,您想要从另一个文本复制相同的文本样式,您只需要获取目标文本的textFormat并将其设置为您的文本。