在对象文字中使用getter和setter时,我看不到在Typescript中访问外部“this”范围的简单方法。请考虑以下事项:
class Report {
stuff: any[];
options = {
length: 10,
get maxLength() { return REPORT.stuff.length }
}
}
REPORT
希望成为Report
对象实例的引用。我意识到我可以通过在构造函数中设置选项并使用var REPORT = this
或类似的方法来解决这个问题,但似乎不够优雅。有没有办法更干净地做到这一点?
答案 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。