2009-06-18 11 views
3

Einfach so, können wir die "geschützte" Sichtbarkeit in Javascript irgendwie emulieren?Ok, wir können private Kennungen in Javascript haben, aber was ist mit geschützten?

+0

Ich denke, der Hauptpunkt ist, in einer Sprache wie JavaScript können Sie die Barriere dort setzen ... aber es ist wie Sandsäcke ... es könnte nicht das Wasser Einweichen stoppen Ihr Teppich: P –

+0

Ich glaube, dass Angerufene veraltet ist, und darauf verlassen sich die Leute anscheinend. – Nosredna

Antwort

4

tun:

/* Note: Do not break/touch this object */ 
...code... 

Oder ein bisschen google fanden diese auf der ersten Seite:

http://blog.blanquera.com/2009/03/javascript-protected-methods-and.html

+0

Was dieser Typ macht, ist nur zu entschlüsseln, um zu sehen, ob er "das" die gleiche Methode wie die aufrufende Funktion hat ... es kann nicht garantieren, dass es der gleiche Typ ist, der anruft. –

+0

Was ich versuche zu sagen ist, dass ich nicht denke, dass Sie auf diese Weise Ihre "geschützten" Sachen wirklich schützen können: P –

+0

@Pablo, stimme ich völlig zu ... aber wenn Sie dieses Verhalten als konkrete Semantik dann JS wollen ist nicht die Sprache, die Sie wollen: P –

1

Was könnte das wohl bedeuten? Sie haben keine Klassen.

Ich vermute, Sie könnten caller analysieren, um zu bestimmen, ob es einige Kriterien erfüllt, damit eine Methode aufgerufen werden darf. Dies wird schrecklich ineffizient sein und Ihre Kriterien werden immer spoofable sein.

+0

Nicht genau richtig. In Javascript ist _everything_ ein Objekt. Sie definieren Klassen mit einer aktiven Syntax anstelle einer passiven Syntax. Zusammensetzung vs. Erklärung. – Christopher

+1

@Christopher ... Sie liegen falsch, nur weil es prototypisch ist, bedeutet nicht, dass die Prototypen Klassen sind! Sind sie auch Schnittstellen? –

+2

Gut, okay. Aber was ich meine ist, dass Sie keinen Namespace von Entitäts-Kategorisierungen haben, zu denen ein Objekt gehört oder nicht gehört, was normalerweise die geschützte Sichtbarkeit ist. Sie können einen Erben nicht von etwas unterscheiden, das wie ein Erben aussehen soll. – chaos

2

Sure können Sie. Hier ist ein weiterer example.

+0

Snap! :) ...... –

+1

Wow. Das ist Psycho. – chaos

+0

Eigentlich ist es CHAOS;) –

1

Es gibt ein interessantes Muster, das hier erwähnt werden sollte: Eine JavaScript-Konstruktorfunktion kann jedes Objekt zurückgeben (nicht notwendig dieses). Man könnte eine Konstruktorfunktion erstellen, die ein Proxy-Objekt zurückgibt, das Proxy-Methoden für die "echten" Methoden des "echten" Instanzobjekts enthält. Das hört sich kompliziert an, ist es aber nicht; hier ist ein Code-Schnipsel:

var MyClass = function() { 
    var instanceObj = this; 
    var proxyObj = { 
     myPublicMethod: function() { 
      return instanceObj.myPublicMethod.apply(instanceObj, arguments); 
     } 
    } 
    return proxyObj; 
}; 
MyClass.prototype = { 
    _myPrivateMethod: function() { 
     ... 
    }, 
    myPublicMethod: function() { 
     ... 
    } 
}; 

Das Schöne daran ist, dass die Proxy-Erstellung automatisiert werden kann, wenn wir eine Konvention für die Benennung der geschützten Methoden definieren. Ich habe eine kleine Bibliothek erstellt, die genau das tut: http://idya.github.com/oolib/