cevap
Aşağıdaki kodu düşünün:
class A {
protected sum: number;
constructor(protected x: number, protected y: number) {
this.sum = this.x + this.y;
}
}
class B extends A {
constructor(x: number, y: number) {
super(x, y);
}
}
ait ctor içinde super
çağrısı sınıf B
sınıfının A
ait ctor çağırır ve biz derlenmiş javascript kodu bakarsak:
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var A = (function() {
function A(x, y) {
this.x = x;
this.y = y;
this.sum = this.x + this.y;
}
return A;
}());
var B = (function (_super) {
__extends(B, _super);
function B(x, y) {
_super.call(this, x, y);
}
return B;
}(A));
yaptığımız açıktır neden olması gerektiğini, aksi takdirde her şey çünkü A
'un cetinde gerçekleşmez, bu x
, y
ve sum
üyelerine B
sınıfının örneklerinde atanmaz.
Daha sonra "iyi, sorun değil, ama neden otomatik olarak gerçekleşiyor? Neden derleyici neden benim için super
'u arayamıyor?" bazen örneğin super
çağırmadan önce bir şey yapmak istiyorum istediğimiz için
(1):
class A {
protected sum: number;
constructor(protected x: number, protected y: number) {
this.sum = this.x + this.y;
}
}
class B extends A {
constructor(x: number, y: number) {
if (x % 2 === 0) {
super(x, y);
} else {
super(x + 1, y);
}
}
}
Sen super
çağırmalıdır adil bir soru ve ben 2 ana neden sayabilirim
B
'un cetveline this
erişmeden önce.
(2) Bunun olup bittiğini açıkça ortaya koyar, aksi halde bunu görmediğiniz için gerçekleşmesini beklemezsiniz.
Bu gereksinim yalnızca kurucular için geçerlidir, sınıf yöntemlerinin super'larını çağırması gerekmez, ancak üst yöntem işlevini yürütmek istiyorsanız bunu yapmakta özgürsünüz.
- 1. Her biri kendi arabirimi olan alt sınıf ve alt sınıflar
- 2. C# alt sınıf türü üst sınıf olarak bildir
- 3. Alt sınıf
- 4. mümkün UILabel alt sınıf
- 5. PHP üst işlevi alt sınıf üyelerini göremiyor
- 6. Sözlük alt sınıfına üst sınıf değişkenini ekleyin ve okunan değeri
- 7. UIApplication nasıl alt sınıf? -
- 8. Alt sınıf yöntemleri alt sınıf argümanlarla geçersiz kılınır mı?
- 9. Sınıf adıyla birleştirilen alt çizgi nedir?
- 10. Üst sınıf Yöntemi Bir sınıf <code>Test</code> çağrıda alt sınıf
- 11. Alt sınıf adı al?
- 12. Java'da bir alt sınıf yapıcısından superclass çağırma
- 13. Alt sınıftan alt sınıf adı nasıl bulunur?
- 14. Raylar: Alt sınıf I çalışıyorum Rails uygulamasında üst sınıfın
- 15. Bir alt sınıf sınıfının statik üye değişkeni
- 16. UITableViewCell bir alt sınıf nasıl seçilir?
- 17. Java'da süper alt sınıf değişkenini inherit in
- 18. JS'de (0, func)() çağrısının amacı nedir?
- 19. Neden alt sınıf yöntemi çağrılmıyor?
- 20. Tepsi simgesini kullanarak alt sınıfın üst sınıf yöntemini çağıramazsınız
- 21. Ruby: Her bir alt sınıf için kod çalıştır
- 22. foreach (alt sınıf) nesnesinin bir süper-sınıf listesinde görünmesi
- 23. Sınıf alt yordamını yürütmek için dize kullanılıyor
- 24. Android'de bir ShapeDrawable için can sıkıcı davranış
- 25. Alt Sınıf - Bağımsız Değişkenler Superclass 'dan
- 26. Alt sınıf nesnesindeki değerlere nasıl erişilir?
- 27. Lift-json'u bir üst sınıf
- 28. Java'da en üst düzey sınıf nedir?
- 29. C# içinde bir alt sınıf nasıl oluşturulur?
- 30. Alt sınıf özelliğini kullanarak alt sınıf özelliklerinin göz ardı edilmesiyle ilgili sorun Automapper
Bu mantıklı. Ama bu alt sınıfın süper öncesi işlevlerinin yürütüldüğü _preconstruct() gibi bir yöntem olamaz mı? Her bir alt sınıfı ebeveyninin koşullarını çoğaltmak için zorlamaktan daha iyi bir yol gibi görünüyor. – user3583223
Önerileriniz ile mevcut 'süper' şeyler yapma arasındaki farkı anladığımdan emin değilim. –
Bence @ user3583223 bir '_preconstruct()' fonksiyonunun SADECE 'super()' çağrısında bazı mantık gerektiren alt sınıflar için mevcut olabileceğini düşündürüyor olabilir. Özel bir mantığa ihtiyaç duymayan tüm çocuk sınıfları, yalnızca 'super() 'ile örtülü bir çağrıda bulunabilir. Diğer bir deyişle, '_preconstruct()' tamamen isteğe bağlı olurken, super() 'çağrıları isteğe bağlı değildir. – MadScone