La respuesta simple es que no se pueden hacer ambos. Puede crear métodos "private"
o "static"
, pero no puede crear Funciones estáticas privadas como en otros idiomas.
La forma en que puede emular la privacidad es cierre:
function f() {
function inner(){}
return {
publicFn: function() {},
publicFn2: function() {}
}
}
aquí debido a cierre, la función inner
se crea cada vez que se llama a f
, y las funciones públicas puede acces esta función inner
, pero para el mundo exterior inner
será oculto.
La forma de crear métodos estáticos de un objeto es simple:
function f() {}
f.staticVar = 5;
f.staticFn = function() {};
// or
f.prototype.staticFn = function() {};
Aquí el objeto función f
sólo tendrá una staticFn
que tiene acceso a variables estáticas, pero nada de los casos.
Tenga en cuenta que la versión prototype
se heredará, mientras que la primera no se heredará.
Así que puede hacer un método privado que no está accediendo a nada desde las instancias, o crea un método estático al que no intenta acceder desde el exterior.
¿quieres ** función estática o método estático **? ¿quieres que sea estático en absoluto? (el ejemplo no aclara) – galambalazs
¿cuál es la diferencia entre un método estático y una función? : S (por cierto lo siento por usar ambas palabras) – user