as3: herhangi bir sırayla argümanların bir nesne kullanarak - sınıf yapılandırma

1 Cevap php

Ben bir sınıfa yapılandırma argümanlar üzerinden geçmek istiyor. Ve herhangi bir sırayla çalıştırmak mümkün olmalıdır - bu sınıf yapılandırma içine gitmek tüm isteğe bağlı değişkenler vardır.

İsteğe bağlı düzenli bir şekilde vars ile şu anda ben sadece geçmektedir. Constuctor düşünürsek aşağıdaki gibi oldu:

private var _reqVar:String;
private var _optVar1:String;
private var _optVar2:String;

public function Constructor(reqVar:String, optVar1:String = "empty", optVar2:String = "empty){

    // set the variable to equal the arguments here...

} 

Bu ile sorunu (argüman listesi oldukça büyük büyüyebilir özellikle) sınıfı başlatmasını özellikle okunabilir değil son kullanıcı içindir

ideal ben buna benzer argümanlar olsa geçmek istiyorum:

var instance:ClassType = new ClassType(reqVar, {width:100, height:100, speed:4, lives:3})

Hangi yine oldukça yalındır. i yanılmak üzerinde nerede şu noktalar şunlardır:

  • aynı anahtar var için argüman atama (i as3 bir eşdeğeri var, sen $ $ anahtar = $ değer kullanabileceğiniz bir anahtarı bir değişken adını başvurmak için php biliyor musun?)
  • sınıf tarafından desteklenen değişken isimleri için ('atmak' yöntemini kullanarak) bir hata görüntüler

herhangi bir yardım takdir.

1 Cevap

Updated answer:

public function Test(reqVar, optionalVars:Object)
{
    for (var prop:String in optionalVars)
    {
        try
        {
            this[prop] = optionalVars[prop];
        }
        catch (error:Error)
        {
            throw new Error("Unknown property: " + prop);
        }
    }

}

Yani soruların cevapları:

  • Bu durumda, object[NAME] ad kullanarak bir özellik veya değişkene atamak this['propertyName'].
  • Bir özellik hasOwnProperty kullanarak olup olmadığını kontrol edebilirsiniz. Ayrıca özellikleri daha değişken başka atamak isterseniz Update:, onların var olmadığını kontrol edebilirsiniz sanmıyorum. Bunu çözmek için, ya sadece onlar var varsaymak onları atamak ve geçersiz bir değişken adı kullandığınızda bir hata alabilir. Ayrıca bir try ... catch bloğu içinde atama sarın ve yukarıda gösterdiğim gibi bir güzel istisna olabilir.