Estoy evaluando selfish y estoy preguntando cómo puedo declarar métodos/campos privados?Métodos privados y campos
Respuesta
La forma habitual de realizar funciones privadas es utilizar una función que sus diversos "métodos" cierran, por ejemplo. recogiendo su ejemplo Dog
, cambiar esta situación:
// The basic Dog example
var Dog = Base.extend({
bark: function() {
return 'Ruff! Ruff!'
}
});
Para
// 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);
}
};
})());
Uso:
new Dog().logBark(); // logs "Ruff! Ruff!" using the truly private function behind the scenes
Re campos privados, la forma habitual es construir cualquier cosa que necesita verdaderamente privadas campos dentro de su función de constructor para que cierren sobre las variables (privadas) dentro de la llamada al constructor, a'la Crockford's pattern:
function Foo(arg) {
var trulyPrivateData = arg;
this.logIt = function() {
console.log(trulyPrivateData);
};
}
Uso:
var f = new Foo(42);
f.logIt(); // logs 42 even though there's no way, externally, to get that value from `f`
... egoísta elimina la función constructora real, pero la función initialize
debe servir al mismo propósito:
var Dog = Base.extend({
initialize: function(arg) {
var woof = arg || 'Ruff! Ruff!';
this.bark = function() {
return woof;
};
}
});
Ahora, no se puede configurar el woof
(excepto en el momento de la construcción, porque lo hicimos a propósito), solo puede recuperarlo de bark
. Por ejemplo, es verdaderamente privado (aparte de que hemos permitido explícitamente bark
devolverlo).
Si usted entra en los detalles técnicos de esto, estos artículos de mi blog pueden (o no) ser útil, ya que cuando usted entra en funciones privadas y tal, que por lo general tienen que empezar a gestionar this
:
- Mythical Methods
- You must remember
this
- Private Methods in JavaScript (en serio en necesidad de una actualización/reescritura)
Y si quiere otra cosa para evaluar, está mi Lineage
project, que es una herencia prototípica igualmente pura, pero con fácil acceso a las propiedades de los objetos principales, funciones, etc. y una sintaxis que fomenta activamente los ámbitos privados para este tipo de cosas.
Eso le da propiedades privadas a nivel de clase; No estoy seguro de que pueda tener propiedades privadas por instancia sin algunas modificaciones a ese marco. Sin embargo, esta mañana no he tomado mucho café. – Pointy
@Pointy: no hay diferencia entre los "métodos" de "instancia" y "nivel de clase" en JavaScript, excepto cómo los llama. La forma en que llamé 'trulyPrivate', era específica de la instancia. Si lo hubiera llamado sin '.call' y acabara de pasar en la instancia' Dog' como argumento, hubiera sido específico de "clase". No se pueden realizar funciones realmente privadas que se invocan mediante la notación 'this.xyz()' directamente en JavaScript (independientemente del marco), ya que todas las propiedades de la instancia son públicas.Más (bastante anticuado): http://blog.niftysnippets.org/2009/09/private-methods-in-javascript.html –
Derecha; No vi que haya una "inicialización" ni realmente aprendí mucho más sobre ese marco en los 15 segundos que pasé en el "readme" de github :-) Es solo hacer objetos, por lo que agregar una propiedad de un cierre no es ningún diferente con el marco que sin él. – Pointy
- 1. JavaDoc: campos y métodos privados
- 2. Cómo probar campos privados que se modifican mediante métodos públicos
- 3. Acceso a campos privados
- 4. Uso de métodos estáticos privados
- 5. ¿Finalizar métodos privados?
- 6. Bloques vs métodos privados?
- 7. F # Métodos estáticos privados
- 8. Método Interceptor en métodos privados
- 9. java: campos privados `volátiles` con getters y setters
- 10. ¿Cómo escribe DataContractSerializer en campos privados?
- 11. Convención de nomenclatura para campos privados
- 12. Recolección de basura de campos privados
- 13. ¿Cuál es la mejor práctica para nombrar métodos privados y estáticos privados en C#?
- 14. Aspectj y captura de métodos privados o internos
- 15. ¿Probar métodos privados y clases internas con NUnit?
- 16. ¿Cuándo debería usar métodos públicos/privados/estáticos?
- 17. ¿Variables/métodos privados en la clase anónima?
- 18. Métodos privados en una clase de Mootools
- 19. Pruebas unitarias aplicadas a métodos privados
- 20. Objetivo-C: ¿Debo declarar métodos privados?
- 21. ¿Cómo puedo probar métodos privados con DUnit?
- 22. ¿Es mejor utilizar los métodos getter o acceder a los campos privados directamente al anular toString?
- 23. ¿Debería sobrecargar la resolución Seleccionar métodos privados?
- 24. ¿Debo usar propiedades públicas y campos privados o campos públicos para los datos?
- 25. Java: ¿cómo implementar métodos abstractos privados?
- 26. en C# son métodos privados por defecto?
- 27. Ventajas de usar métodos estáticos privados
- 28. Pruebas unitarias de métodos privados en Xcode
- 29. Estilo de código para métodos privados en C#
- 30. Código de Entity Framework Primero: ¿Cómo mapear campos privados?
En cuanto a los ejemplos, diría que es una muy buena pregunta :)) – mihai
Se me ocurrió esta solución aquí que implica variables privadas + cierres, ¿qué opinas? http://marcelorjava.wordpress.com/2014/06/07/object-oriented-programming-with-java-and-javascript/ – theMarceloR