• SpryFlashCMS das Flash CMS
  • TWUMBLE - bald online
  • Adobe User Group
Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-11-2001, 12:02   #1 (Permalink)
wolter.biz
 
Benutzerbild von wolter
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 3.296
Question Verstecken von Poperties vor einem FOR-IN-LOOP?

hallo,

man kann ja objekte sehr gut um weitere eigenschaften und methoden erweitern (z. b. mit prototype). leider sind aber immer alle diese eigenschaften in einem for-in-loop zu ermitteln, was manchmal ziemlich nervig sein kann. angeblich gibt es einen weg, dies zu verhindern (evtl. irgendeine __proto__ und prototype kombination). weis jemand wie?

gruss,

sascha.
wolter ist offline   Mit Zitat antworten
Alt 05-11-2001, 13:49   #2 (Permalink)
ontheoutsidelookingin
 
Benutzerbild von dassoud
 
Registriert seit: Jun 2001
Ort: Dortmund
Beiträge: 5.897
hm, so auf die schnelle wüßte ich einen weg, nur bestimmte properties anzeigen zu lassen:

PHP-Code:
testObject=new Object();

testObject.tratzen=function(wert){
trace(wert);
}
testObject.bloedsinn="trara";

for (var 
name in testObject) {
     var 
isString typeof (testObject[name]) == "string";
        if (
isString) {
            
trace(testObject[name]);
                      }

würde z.B. nur "trara" anzeigen, die function "tratzen" jedoch nicht.

ist übrigens auch ziemlich nervig, daß bei einem for..in-loop alle properties "unten nach oben" durchlaufen werden.

grüße, dassoud
__________________

33rpm
dassoud ist offline   Mit Zitat antworten
Alt 05-11-2001, 14:12   #3 (Permalink)
CodeTypingOrganism CTO
 
Registriert seit: Jul 2001
Ort: NRW
Beiträge: 432
Ich hatte erst daran gedacht, die toString-Methode der ungewünschten Werte zu überschreiben, aber die wird da gar nicht aufgerufen.

Vielleicht weiss jemand anderes, was da aufgerufen wird?
klitze7-c004 ist offline   Mit Zitat antworten
Alt 05-11-2001, 14:22   #4 (Permalink)
ontheoutsidelookingin
 
Benutzerbild von dassoud
 
Registriert seit: Jun 2001
Ort: Dortmund
Beiträge: 5.897
wie was? toString ist doch eine globale Object-methode, oder nicht? kann man natürlich auch überschreiben...

was meinst du denn jetzt, was wo aufgerufen wird?

grüße, dassoud
__________________

33rpm
dassoud ist offline   Mit Zitat antworten
Alt 05-11-2001, 14:35   #5 (Permalink)
CodeTypingOrganism CTO
 
Registriert seit: Jul 2001
Ort: NRW
Beiträge: 432
Na, ich denke, irgendwas muss doch vielleicht zu überschreiben sein in dem for(in) Teil der Schleife? Werden da nicht irgenwelche Methoden (intern) aufgerufen?
klitze7-c004 ist offline   Mit Zitat antworten
Alt 05-11-2001, 14:45   #6 (Permalink)
ontheoutsidelookingin
 
Benutzerbild von dassoud
 
Registriert seit: Jun 2001
Ort: Dortmund
Beiträge: 5.897
hm, bei einem for..in-loop werden ja alle properties eines objects durchlaufen, von "unten nach oben".

dann kommen ja die globalen object-methoden typeof, valueof , tostring zum einsatz, die man bestimmt auch so umschreiben kann/könnte, daß nur bestimmte properties angezeigt werden...

ist einen versuch wert....grüße, dassoud
__________________

33rpm
dassoud ist offline   Mit Zitat antworten
Alt 05-11-2001, 15:42   #7 (Permalink)
wolter.biz
 
Benutzerbild von wolter
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 3.296
das überschreiben der methoden würde zwar evtl. die ausgabe unterbinden, aber trotzdem werden die "objekt-instanzen" noch immer in der schleife gefunden. angeblich kann man die existenz verstecken, indem man beim zuweisen der methoden und properties sowas wie klasse.prototype.__proto__.methode verwendet. mir ist das so aber leider nicht gelungen...
wolter ist offline   Mit Zitat antworten
Alt 05-11-2001, 17:05   #8 (Permalink)
ontheoutsidelookingin
 
Benutzerbild von dassoud
 
Registriert seit: Jun 2001
Ort: Dortmund
Beiträge: 5.897
hm, wäre natürlich klasse, habe ich leider bisher noch nicht gesehen.

hm, mit __proto__ erbt ja normalerweise eine neues object die properties/methoden eines anderen objects:

PHP-Code:
mathematik = new Object;

mathematik.__proto__Math;

trace (mathematik.random()); 
ich glaube auch fast, das man die unerwünschten properties in for..in loops bei eigenen objects nicht unterbinden kann, lasse mich da natürlich gern eines besseren belehren...

grüße, dassoud
__________________

33rpm
dassoud ist offline   Mit Zitat antworten
Alt 06-11-2001, 09:09   #9 (Permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
Muß gestehen ist mir auch noch nicht gelungen. Aber ich halt weiterhin die Augen offen und wenn ich mal wieder etwas mehr Zeit habe werd ich mich mal ran machen...

mfg
Matze K.
Madokan ist offline   Mit Zitat antworten
Alt 07-11-2001, 15:05   #10 (Permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: www
Beiträge: 24
verstecken von Methoden geht IMHO nur, in dem man die Kette für die Zeit des for in loops unterbricht, oder eben mit typeof() == "function" testet, was dann in etwa so aussieht:

PHP-Code:
function Semmel() {
    
this.class = "Semmel";
    
this.aufstriche = ["Butter","Marmelade","Nutella"];
}

Semmel.prototype.showAufstriche = function() {

    
trace ("------ aufstriche gefiltert -------");
    for (var 
i in this.aufstriche) {
        if (
typeof(this.aufstriche[i]) != "function") {
            
trace " : " this.aufstriche[i]);
        }
    }

    
trace ("------ aufstriche ungefiltert -------");
    for (var 
i in this.aufstriche) {
        
trace " : " this.aufstriche[i]);
    }


    var 
this.__proto__.__proto__;

    
trace ("------ nur eigene methoden von semmel -------");
    
this.__proto__.__proto__ null;
    for (var 
i in this) {
            
trace (" : " this[i]);
    }
    
this.__proto__.__proto__ m;

    
trace ("------ keine methoden -------");
    var 
this.__proto__;
    
this.__proto__ null;
    for (var 
i in this) {
            
trace (" : " this[i]);
    }
    
this.__proto__ m;
    
    
trace ("------ alle methoden von semmel -------");
    for (var 
i in this) {
            
trace (" : " this[i]);
    }
    
trace ("-------------");

}

Object.prototype.pollution = function(){

    
trace("don't do that");
    for (
i in this) {
        
trace(" : " this[i]);
    }
}

meineSemmel = new Semmel();
meineSemmel.showAufstriche();
pollution(); 
kiriko ....
kiriko ist offline   Mit Zitat antworten
Alt 07-11-2001, 17:37   #11 (Permalink)
ontheoutsidelookingin
 
Benutzerbild von dassoud
 
Registriert seit: Jun 2001
Ort: Dortmund
Beiträge: 5.897
jau, den typeof-ansatz hatte ich ja oben auch schonmal angerissen.

einen ähnlichen ansatz habe ich auch bei layer51.com gesehen.

sieht gut aus!

grüße, dassoud
__________________

33rpm
dassoud ist offline   Mit Zitat antworten
Alt 08-11-2001, 07:51   #12 (Permalink)
ontheoutsidelookingin
 
Benutzerbild von dassoud
 
Registriert seit: Jun 2001
Ort: Dortmund
Beiträge: 5.897
da isser:

http://www.layer51.com/proto/d.asp?p=5&f=265

grüße, dassoud
__________________

33rpm
dassoud ist offline   Mit Zitat antworten
Alt 08-11-2001, 09:21   #13 (Permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
Dies ist jedoch kein echtes Workaround, da die Properties nicht zu 100% versteckt werden - leider !

mfg
Matze K.
Madokan ist offline   Mit Zitat antworten
Alt 08-11-2001, 09:51   #14 (Permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: www
Beiträge: 24
Hast du ein Beispiel, welche Properties du gerne verstecken möchtest ?

kiriko ...
kiriko ist offline   Mit Zitat antworten
Alt 11-11-2001, 21:14   #15 (Permalink)
wolter.biz
 
Benutzerbild von wolter
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 3.296
hi kiriko,

grundsetzlich möchte ich zumindest alle methoden, die ich einem prototypten gebe aus ´den for-in-loops ausschliessen. so könnte man dann z. b. das object-objekt erweitern ohne gleichzeitig die for-in-loops jedesmal filtern zu müssen.

gruss,

sascha.
wolter ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2010 Marc Thiele und Sascha Wolter.