如果我在下面做了类似的事情,我该如何在课堂上访问该物业?
class Person
{
private static name: string;
}
console.log(Person.name);
不应该无法进入吗?
答案 0 :(得分:15)
应该是错误但不是。从规范,第8.2.1节:
无法指定静态的可访问性 - 它们实际上总是公开的。
关于静力学的辅助功能修饰符是团队过去考虑过的事情。如果你有一个强大的用例,你应该在codeplex网站上提出这个问题!
答案 1 :(得分:1)
嗯,不是真的,事实上你可以。也许最重要的是询问它所涉及的TypeScript 版本。我有 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;
})();
并且编译它(这是你看到的)以及执行它都没有问题(你应该相信,或者,如果你愿意的话,试试)。
答案 2 :(得分:0)
class Person
{
private static theName: string = "John";
static get name():string{
return Person.theName;
}
}
console.log(Person.name);
如果静态属性是私有的,我们需要提供一个静态get方法来访问它。这可能不是一个常见的解决方案,但它是我所知道的直接访问私有静态属性的唯一方法。另一方面,如果您还打算从实例化对象访问该属性,则可能必须添加第二个get方法。两个get方法都可以具有相同的名称,因为静态get方法对于实例化的对象是不可见的。