[英]Can't have access of parent class properties from child class - Javascript
我在 javascript 中有兩個類,我無法從子 class 獲得父 class 的值屬性。
父 class 是“拾取器”,拾取器將獲取“拾取器”應抓取的橙子數量的值,並將它們放入數組中,然后調用卡車。
子 class 是“卡車”,卡車收到“Picker”在數組中的橙子數量。
問題是,當卡車試圖在陣列中獲取橙子時,它總是空的,我不明白為什么。
這是我的代碼
class Picker { constructor() { this.orangeBox = []; } amountOrangesToPick(amount) { for (let i = 0; i <= amount; i++) { this.orangeBox.push(i); } return this; } callTruck() { console.log("TRUUUUUUCK"); console.log(this.orangeBox); } } class Truck extends Picker { constructor() { super(); console.log(this.orangeBox); } } let picker = new Picker(); picker.amountOrangesToPick(20).callTruck(); let truck = new Truck();
謝謝
您可能只想將new Picker()
更改為new Truck()
或者你想要一個工廠方法:
class Picker { orangeBox = []; amountOrangesToPick(amount) { for (let i = 0; i <= amount; i++) { this.orangeBox.push(i); } return this; } callTruck() { console.log("TRUUUUUUCK"); const truck = new Truck(); truck.orangeBox = this.orangeBox.splice(0); return truck; } } class Truck extends Picker { constructor() { super(); } honk() { console.log(this.orangeBox); return this; } } const picker = new Picker(); const truck = picker.amountOrangesToPick(20).callTruck().honk(); console.log(truck.orangeBox);
但是為了將來的測試目的,您應該閱讀依賴注入和控制反轉。 因此,您的代碼應如下所示:
class Picker { orangeBox = []; truck = null; constructor(truck) { this.truck = truck; } amountOrangesToPick(amount) { for (let i = 0; i <= amount; i++) { this.orangeBox.push(i); } return this; } callTruck() { console.log("TRUUUUUUCK"); this.truck.orangeBox = this.orangeBox.splice(0); return truck; } } class Truck extends Picker { constructor() { super(); } honk() { console.log(this.orangeBox); return this; } } const picker = new Picker(new Truck()); picker.amountOrangesToPick(20).callTruck().honk();
這就是我解決問題的方法,使用@Misiur 在他的回答中說的依賴注入的概念,但我做了一點不同,我不接受他的回答的原因是因為我認為我的例子更干凈,並且使用依賴注入,不需要擴展我的課程。
class Picker {
orangeBox = [];
amountOrangesToPick(amount) {
for (let i = 1; i <= amount; i++) {
this.orangeBox.push(i);
}
return this;
}
callTruck() {
console.log("TRUUUUUUCK");
}
}
class Truck {
picker = null;
constructor(picker) {
this.picker = picker;
}
getOranges() {
console.log(this.picker.orangeBox);
}
}
const picker = new Picker();
picker.amountOrangesToPick(20).callTruck();
const truck = new Truck(picker);
truck.getOranges();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.