簡體   English   中英

無法從子 class - Javascript 訪問父 class 屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM