class Animal {
private name:string;
public Firstname:string;
constructor(theName: string)
{
this.name = theName;
this.Firstname=theName;
}
}
class Tiger {
function sample(){
Animal animalName=new Animal('Tiger');
document.body.innerHTML = animalName.name;
}
sample();
}
你是动物类中我对这个typeScript的新手我在类构造函数中创建了一个私有变量名。在类Tiger中,我创建了Animal类的实例,并且能够访问该私有变量。
我的问题是在java中,如果我们这样做,我们会得到错误。但是在typeScript中(因为typescript支持oops)我们没有得到任何错误而且它给出的值是怎么可能的?
答案 0 :(得分:19)
首先 - 您的代码将无法编译。 Typescript将检查名称的可访问性并给出错误。在打字稿操场上查看自己:playground
第二 - 如果您要删除打字稿检查,则可以访问私有属性,例如:
spyOn(objectFactory, 'getById').and.returnValue({ $promise: $q.when(readJSON('test/resources/object.json'))});
这是因为本机javascript没有私有属性(private properties)的概念。由于打字稿被编译为javascript,你有这样的可能性。
答案 1 :(得分:4)
使用Amid发布的as any
技巧的另一种方法是使用字符串索引符号,该字符串索引符号是intentional escape hatch用于访问私有成员:
console.log(animalName['name']);
答案 2 :(得分:-1)
直接不可能从另一个类访问私有变量,但是可以通过getter和setter方法来实现。