Private statische Eigenschaften in Typoskript

stimmen
9

Wenn ich unter so etwas tun, wie kann ich Zugriff auf die Eigenschaft aus der Klasse?

class Person
{
    private static name: string;
}

console.log(Person.name);

Sollte es nicht unzugänglich?

Veröffentlicht am 10/10/2012 um 21:11
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
12

Es sollte ein Fehler sein, aber ist es nicht. Von der Spezifikation, Abschnitt 8.2.1:

Es ist nicht möglich, die Zugänglichkeit zu spezifizieren Statik-sie sind effektiv immer öffentlich.

Accessibility Modifikatoren auf Statik sind etwas das Team in der Vergangenheit in Betracht gezogen hat. Wenn Sie einen starken Anwendungsfall haben , sollen Sie diese bringen auf bis Codeplex - Website!

Beantwortet am 10/10/2012 um 21:17
quelle vom benutzer

stimmen
1

Nun, nicht wirklich in der Tat möglich. Vielleicht am wichtigsten ist , über das Typoskript fragen Version sie sich bezieht. Ich habe v1.5 beta , ein Teil meiner VS2012 - Installation (ja, es funktioniert trotz es bei VS2013 ausgerichtet ist).

Ich habe eine Klasse wie folgt aus:

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

In der Probe über Sie beide sehen können privateund static. Die Klasse wird auf die folgende Javascript zusammengestellt:

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

und es gibt kein Problem mit entweder Kompilieren (das Sie sehen), sowie die Ausführung es (das sollten Sie vertrauen, oder, wenn man so will, versuchen).

Beantwortet am 20/05/2015 um 14:38
quelle vom benutzer

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

console.log(Person.name);

Wenn eine statische Eigenschaft privat ist, müssen wir eine statische Methode get zur Verfügung zu stellen, um darauf zuzugreifen. Dies kann nicht eine gemeinsame Lösung sein, aber es ist der einzige Weg, den ich kenne, um direkt eine private statische Eigenschaft zugreifen. Auf der anderen Seite, können Sie eine zweite Methode get hinzufügen müssen, wenn Sie auch die Eigenschaft für den Zugriff von einem instanzierte Objekt beabsichtigen. Beide bekommen Methoden können den gleichen Namen haben, da die statische Methode get unsichtbar für das instanzierte Objekt sein wird.

Beantwortet am 16/11/2015 um 20:52
quelle vom benutzer

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