我们可以在typescript

时间:2016-02-25 11:47:17

标签: typescript

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)我们没有得到任何错误而且它给出的值是怎么可能的?

3 个答案:

答案 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方法来实现。