TypeScript: الوصول إلى "this" الخارجي من محصل حرفي
عند استخدام الـ getters و setters في الكائنات الحرفية، لا أستطيع أن أرى طريقة سهلة للوصول إلى نطاق الـ "this" الخارجي في TypeScript. انظر المثال التالي:
class Report {
stuff: any[];
options = {
length: 10,
get maxLength() { return REPORT.stuff.length }
}
}
حيث يريد REPORT أن يكون مرجعًا إلى نسخة من كائن Report. أدرك أنني أستطيع حل هذا عن طريق ضبط الخيارات داخل المُنشئ واستخدام var REPORT=this أو ما شابه، لكن يبدو ذلك غير أنيق. هل هناك طريقة للقيام بذلك بشكل أنظف؟
الإجابة رقم 1
أدرك أنني يمكنني حل هذا عن طريق ضبط الخيارات داخل المنشئ واستخدام 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
الإجابة رقم 2
يمكنك الاستفادة من ربط 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 كما كان لديك في الأصل. افترضت أن هذا خطأ مطبعي، حتى الآن فقط، عندما علمت للتو أن هذا يعتبر جافاسكريبت صالح.
