Αν κάνω κάτι σαν αυτό παρακάτω, πώς μπορώ να έχουν πρόσβαση στο ακίνητο από την τάξη;
class Person
{
private static name: string;
}
console.log(Person.name);
Δεν πρέπει να απρόσιτη;
Αν κάνω κάτι σαν αυτό παρακάτω, πώς μπορώ να έχουν πρόσβαση στο ακίνητο από την τάξη;
class Person
{
private static name: string;
}
console.log(Person.name);
Δεν πρέπει να απρόσιτη;
Θα πρέπει να είναι ένα λάθος, αλλά δεν είναι. Από το spec, ενότητα 8.2.1:
Δεν είναι δυνατό να καθορίσετε την προσβασιμότητα της στατικής-είναι αποτελεσματικά πάντα κοινό.
Τροποποιητές Προσβασιμότητα στο στατικής είναι κάτι που η ομάδα έχει εξεταστεί στο παρελθόν. Αν έχετε μια ισχυρή περίπτωση χρήσης θα πρέπει να φέρει αυτό επάνω στο CodePlex site!
Λοιπόν, δεν είναι πραγματικά, το γεγονός ότι δεν μπορείτε. Ίσως το πιο σημαντικό είναι να ρωτήσετε σχετικά με την γραφομηχανή έκδοση αναφέρεται. Έχω v1.5 beta , μέρος της εγκατάστασης VS2012 μου (ναι, λειτουργεί παρά το γεγονός ότι απευθύνεται σε VS2013).
Έχω μια τάξη σαν αυτό:
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);
};
}
Στο παραπάνω παράδειγμα, μπορείτε να δείτε και τα δύο privateκαι static. Η κατηγορία αυτή καταρτίζονται με την ακόλουθη 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;
})();
και δεν υπάρχει πρόβλημα είτε με την κατάρτιση (αυτό που βλέπετε), καθώς και την εκτέλεση (αυτό θα πρέπει να εμπιστεύονται, ή, αν θέλετε, να δοκιμάσετε).
class Person
{
private static theName: string = "John";
static get name():string{
return Person.theName;
}
}
console.log(Person.name);
Αν μια στατική ακίνητο είναι ιδιωτική πρέπει να παρέχει μια στατική μέθοδο get για να αποκτήσετε πρόσβαση. Αυτό δεν μπορεί να είναι μια κοινή λύση, αλλά είναι ο μόνος τρόπος που ξέρω για να έχετε άμεση πρόσβαση σε ιδιωτική στατική ιδιοκτησίας. Από την άλλη πλευρά, μπορεί να χρειαστεί να προσθέσετε μια δεύτερη μέθοδο get αν σκοπεύετε να αποκτήσετε πρόσβαση στο ακίνητο από τεκμηριώθηκε αντικείμενο. Και οι δύο παίρνουν οι μέθοδοι μπορούν να έχουν το ίδιο όνομα, δεδομένου ότι η μέθοδος στατικής πάρει θα είναι αόρατη στο τεκμηριώθηκε αντικειμένου.