proprietà statiche private in dattiloscritto

voti
9

Se faccio qualcosa di simile qui di seguito, come posso accedere alla proprietà la classe?

class Person
{
    private static name: string;
}

console.log(Person.name);

Non dovrebbe inaccessibile?

È pubblicato 10/10/2012 alle 21:11
fonte dall'utente
In altre lingue...                            


3 risposte

voti
12

Dovrebbe essere un errore, ma non lo è. Dalla spec, sezione 8.2.1:

Non è possibile specificare l'accessibilità della statica: sono effettivamente sempre pubblica.

Modificatori di accessibilità sulla statica sono qualcosa che il team ha preso in considerazione in passato. Se si dispone di un forte caso d'uso si dovrebbe portare questo in su su CodePlex sito!

Risposto il 10/10/2012 a 21:17
fonte dall'utente

voti
1

Beh, non proprio, in realtà si può. Forse più importante è quello di chiedere il dattiloscritto versione si riferisce. Ho v1.5 beta , parte della mia installazione VS2012 (sì, funziona nonostante si rivolge a VS2013).

Ho una classe come questa:

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

Nell'esempio di cui sopra è possibile vedere sia privatee static. La classe è redatto al seguente 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;
})();

e non c'è nessun problema sia con la compilazione di esso (vedi questo), così come l'esecuzione di esso (questo si dovrebbe fiducia, o, se si vuole, provare).

Risposto il 20/05/2015 a 14:38
fonte dall'utente

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

console.log(Person.name);

Se una proprietà statica è privato abbiamo bisogno di fornire un metodo get statica per accedervi. Questo potrebbe non essere una soluzione comune, ma è l'unico modo che conosco per accedere direttamente a una proprietà statica privata. D'altra parte, potrebbe essere necessario aggiungere un secondo metodo get se si ha intenzione anche di accedere alla proprietà da un oggetto istanziato. Entrambi ottenere metodi possono avere lo stesso nome dal momento che il metodo get statica sarà invisibile l'oggetto istanziato.

Risposto il 16/11/2015 a 20:52
fonte dall'utente

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