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