propiedades estáticas privadas a máquina de escribir

votos
9

Si hago algo como esto más adelante, ¿cómo puedo acceder a la propiedad a cabo la clase?

class Person
{
    private static name: string;
}

console.log(Person.name);

¿No debería inaccesible?

Publicado el 10/10/2012 a las 21:11
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
12

Debe ser un error, pero no lo es. A partir de la especificación, la sección 8.2.1:

No es posible especificar la accesibilidad de la estática, que son efectivamente siempre públicos.

Modificadores de accesibilidad en la estática son algo que el equipo ha considerado en el pasado. Si usted tiene un fuerte caso de uso que debe llevar esto en CodePlex sitio!

Respondida el 10/10/2012 a las 21:17
fuente por usuario

votos
1

Bueno, en realidad no, de hecho, se puede. Tal vez lo más importante es preguntar sobre el texto mecanografiado versión se refiere. Tengo beta v1.5 , parte de mi instalación de VS2012 (sí, funciona a pesar de que está dirigido a VS2013).

Tengo una clase como esta:

class ItemListPreProcessor {

    private static names: string[] = [ 'Name', 'Age' ];

    static createHeader = (eltName: string) => {
        var pdiv = $(eltName);
        pdiv.html('<table><thead><tr></tr></thead></tr><tbody></tbody></table>');
        var row = $('tr', pdiv);
        ItemListPreProcessor.names.forEach((n) => {
            row.append('<th>' + n + '</th>');
        });
        return $('tbody', pdiv);
    };
}

En el ejemplo anterior se puede ver tanto privatey static. La clase se compila a la siguiente Javascript:

var ItemListPreProcessor = (function () {
    function ItemListPreProcessor() {
    }
    ItemListPreProcessor.names = ['Name', 'Age'];

    ItemListPreProcessor.createHeader = function (eltName) {
        var pdiv = $(eltName);
        pdiv.html('<table><thead><tr></tr></thead></tr><tbody></tbody></table>');
        var row = $('tr', pdiv);
        ItemListPreProcessor.names.forEach(function (n) {
            row.append('<th>' + n + '</th>');
        });
        return $('tbody', pdiv);
    };
    return ItemListPreProcessor;
})();

y no hay ningún problema, ya sea con la compilación (esto se ve), así como la ejecución (esto se debe confiar, o, si se quiere, tratar).

Respondida el 20/05/2015 a las 14:38
fuente por usuario

votos
0
    class Person
{
    private static theName: string = "John";
    static get name():string{
        return Person.theName;
    }
}

console.log(Person.name);

Si una propiedad estática es privada necesitamos proporcionar un método get estática para acceder a ella. Esto puede no ser una solución común, pero es la única forma que conozco para acceder a una propiedad privada estática directamente. Por otro lado, es posible que tenga que añadir un segundo método get si también tiene la intención de acceder a la propiedad de un objeto instanciado. Ambos métodos se pueden obtener con el mismo nombre ya que el método get estática será invisible para el objeto instanciado.

Respondida el 16/11/2015 a las 17:52
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more