Sto valutando selfish e mi chiedo come posso dichiarare metodi/campi privati?Metodi e campi privati
risposta
Il modo usuale per eseguire funzioni private consiste nell'utilizzare una funzione in cui i vari "metodi" si chiudono, ad es. raccogliendo la loro Dog
esempio, modificare questo:
// The basic Dog example
var Dog = Base.extend({
bark: function() {
return 'Ruff! Ruff!'
}
});
Per
// Adding a private function
var Dog = Base.extend((function(){
function trulyPrivate() {
console.log(this.bark());
}
return {
bark: function() {
return 'Ruff! Ruff!'
},
logBark: function() {
trulyPrivate.call(this);
}
};
})());
Usage:
new Dog().logBark(); // logs "Ruff! Ruff!" using the truly private function behind the scenes
Re campi privati , come al solito è quello di costruire qualsiasi cosa che ha veramente bisogno privata campi all'interno della funzione di costruzione in modo che chiudano le variabili (private) all'interno della chiamata al costruttore, a'la Crockford's pattern:
function Foo(arg) {
var trulyPrivateData = arg;
this.logIt = function() {
console.log(trulyPrivateData);
};
}
Usage:
var f = new Foo(42);
f.logIt(); // logs 42 even though there's no way, externally, to get that value from `f`
... egoista elimina la funzione di costruzione vera e propria, ma la funzione initialize
dovrebbe servire allo stesso scopo:
var Dog = Base.extend({
initialize: function(arg) {
var woof = arg || 'Ruff! Ruff!';
this.bark = function() {
return woof;
};
}
});
Ora, impossibile impostare woof
(eccetto che al momento della costruzione, perché l'abbiamo fatto apposta), è possibile recuperarlo solo da bark
. Ad esempio, è veramente privato (a parte questo abbiamo esplicitamente permesso a bark
di restituirlo).
Se si entra in dettagli tecnici di questo, questi articoli dal mio blog possono (o non possono) essere utile, dal momento che quando si entra in funzioni private e simili, è in genere hanno per iniziare a gestire this
:
- Mythical Methods
- You must remember
this
- Private Methods in JavaScript (seriamente bisogno di un aggiornamento/riscrittura)
E se vuoi valutare un'altra cosa, c'è la mia Lineage
project, che è un'eredità prototipica allo stesso modo, ma con un facile accesso alle proprietà dell'oggetto, alle funzioni, ecc. E una sintassi che incoraggia attivamente gli ambiti privati per questo genere di cose.
Questo ti dà proprietà private a livello di classe; Non sono sicuro che potresti avere proprietà private per istanza senza alcune modifiche a tale framework. Comunque non ho ancora avuto molto caffè stamattina. – Pointy
@Pointy: Non c'è differenza tra "istanza" e "livello" "metodi" in JavaScript eccetto come li chiami. Il modo in cui ho chiamato 'reallyPrivate', era specifico dell'istanza. Se l'avessi chiamato senza '.call' e appena passato nell'istanza di' Dog' come argomento, sarebbe stato "specifico" di classe. Non è possibile eseguire funzioni veramente private chiamate tramite la notazione 'this.xyz()' direttamente in JavaScript (indipendentemente dal framework), poiché tutte le proprietà sull'istanza sono pubbliche.Altro (abbastanza datato): http://blog.niftysnippets.org/2009/09/private-methods-in-javascript.html –
Right right; Non ho visto che c'è un "inizializzare", né imparare molto altro su quel framework nei 15 secondi che ho trascorso sul github "readme" :-) Sta solo facendo degli oggetti, quindi aggiungere una proprietà da una chiusura non è diverso con il quadro che senza. – Pointy
- 1. JVM e metodi privati
- 2. Metodi privati su metodi pubblici
- 3. Accesso ai campi privati
- 4. metodi privati in Ruby
- 5. F # Metodi statici privati
- 6. Rails ActiveSuppport: Preoccupazione e metodi privati
- 7. Rendi privati i metodi delegati
- 8. Rendi definitivi i metodi privati?
- 9. astratti campi privati a Scala tratto
- 10. Convenzione di denominazione delle campi privati
- 11. Inizializza campi privati readonly dopo la deserializzazione
- 12. Avere proprietà e metodi privati nelle classi ES6
- 13. Swift - Unità test di variabili e metodi privati
- 14. Prova i metodi privati e le classi interne con NUnit?
- 15. Qual è la procedura migliore per denominare metodi privati e statici privati in C#?
- 16. Protezione ingresso di metodi privati / protetti?
- 17. Metodi privati in una classe Mootools
- 18. Quando dovrei usare metodi pubblici/privati / statici?
- 19. freccetta, unità di test metodi privati
- 20. Metodi privati di Ruby on Rails?
- 21. Sovrascrittura dei metodi privati in Java
- 22. Perché OpenJDK inserisce metodi privati in vtable?
- 23. Devo testare i metodi privati usando RSpec?
- 24. Java: come implementare metodi astratti privati?
- 25. Perché i metodi "privati" nell'oggetto orientato?
- 26. Hai mai usato metodi di estensione privati?
- 27. Impostazione Java di campi privati all'interno dei costruttori
- 28. Perché è consentito accedere ai campi privati Java tramite riflessione?
- 29. Iniezione Dipendenza Dagger Android non riesce su campi privati
- 30. Il costruttore di tuple struct si lamenta dei campi privati
Guardando gli esempi direi che è una buona domanda :)) – mihai
Mi sono inventato questa soluzione qui che coinvolge variabili private + chiusure, cosa ne pensi? http://marcelorjava.wordpress.com/2014/06/07/object-oriented-programming-with-java-and-javascript/ – theMarceloR