propriétés statiques privées dactylographiée

voix
9

Si je fais quelque chose comme ceci ci-dessous, comment puis-je accéder à la propriété sur la classe?

class Person
{
    private static name: string;
}

console.log(Person.name);

Ne devrait pas inaccessible?

Créé 10/10/2012 à 21:11
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
12

Il doit être une erreur mais n'est pas. De la spécification, l'article 8.2.1:

Il est impossible de préciser l'accessibilité des-ils statics efficacement toujours public.

Les modificateurs d'accessibilité sur l'sont quelque chose statics équipe a examiné dans le passé. Si vous avez un cas fort utilisation , vous devez apporter ce sur CodePlex site!

Créé 10/10/2012 à 21:17
source utilisateur

voix
1

Eh bien, pas vraiment, en fait , vous pouvez. Peut - être le plus important est de poser des questions sur la tapuscrit la version il se rapporte. Je beta v1.5 , une partie de mon installation de VS2012 (oui, cela fonctionne bien , il est destiné à VS2013).

J'ai une classe comme ceci:

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);
    };
}

Dans l'exemple ci - dessus , vous pouvez voir à la fois privateet static. La classe est compilé dans le Javascript suivant:

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;
})();

et soit compiler il n'y a pas de problème (ce que vous voyez), ainsi que l'exécuter (ce que vous devez faire confiance, ou, si vous voulez, essayez).

Créé 20/05/2015 à 14:38
source utilisateur

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

console.log(Person.name);

Si une propriété statique nous est privé doivent fournir une méthode get statique pour y accéder. Cela peut ne pas être une solution commune, mais il est le seul moyen que je connaisse pour accéder directement à une propriété statique privée. D'autre part, vous devrez peut-être ajouter une seconde méthode get si vous avez l'intention aussi d'accéder à la propriété d'un objet instancié. Les deux méthodes peuvent obtenir le même nom depuis la méthode get statique sera invisible à l'objet instancié.

Créé 16/11/2015 à 20:52
source utilisateur

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