TypeScript:从文字getter访问外部“this”

时间:2015-10-26 22:54:54

标签: typescript object-literal

在对象文字中使用getter和setter时,我看不到在Typescript中访问外部“this”范围的简单方法。请考虑以下事项:

class Report {
    stuff: any[];

    options = {
        length: 10,
        get maxLength() { return REPORT.stuff.length }
    }
}

REPORT希望成为Report对象实例的引用。我意识到我可以通过在构造函数中设置选项并使用var REPORT = this或类似的方法来解决这个问题,但似乎不够优雅。有没有办法更干净地做到这一点?

2 个答案:

答案 0 :(得分:4)

  

我意识到我可以通过在构造函数中设置选项并使用var REPORT = this或类似来解决这个问题,但看起来不够优雅

您可以利用构造函数中定义options *的事实,而不是在构造函数中设置选项。因此,将this存储到options

class Report {
    stuff: any[] = [];

    options = {
        _report: this,
        length: 10,
        get maxLength() { return (this._report as Report).stuff.length }
    }
}

let foo = new Report(); 
foo.stuff = [1,2];
console.log(foo.options.maxLength); // 2

答案 1 :(得分:1)

您可以利用lambdas的this绑定。

class Report {
    stuff: any[];

    options = {
        length: 10,
        maxLength: () => this.stuff.length
    }
}

编译到

var Report = (function () {
    function Report() {
        var _this = this;
        this.options = {
            length: 10,
            maxLength: function () { return _this.stuff.length; }
        };
    }
    return Report;
})();

编辑:这会产生一个函数,而不是像你原来那样的getter。我认为这是一个错字,直到现在,当我刚刚学会了有效的javascript。