簡體   English   中英

Class 屬性給出了 no-undef

[英]Class properties are giving no-undef

我正在嘗試在 ReactJS 中制作非組件 class。 我在 JavaScript 上關注的大多數教程都表明,當您制作 class 時,您只需使用this.[name]指定它們即可創建屬性。

有些東西真的不喜歡這樣,它給我的屬性拋出了一個no-undef錯誤。

這是有問題的代碼:

class MicroBitConnection {
    constructor(device) {
        this.device = device;

        this.connectDAP();
    }

    connectDAP() {
        this.transport = new DAPjs.WebUSB(device);
        this.dap       = new DAPjs.DAPLink(transport);
    }
}

現在我什至沒有在任何地方實例化 class,它立即給了我這個錯誤:

Line 11:43:  'device' is not defined     no-undef
Line 12:44:  'transport' is not defined  no-undef

這似乎不是一個 linting 問題,因為即使在文件頂部使用/* eslint no-undef: 0 */ // --> OFF此警告,實際運行在某處實例化 class 的代碼也會給出同樣的錯誤:

Error: ReferenceError: device is not defined

在您的connectDAP方法中,您引用了未定義的變量devicetransport 您可能希望使用在實例this上定義的屬性:

class MicroBitConnection {
    constructor(device) {
        this.device = device;

        this.connectDAP();
    }

    connectDAP() {
        this.transport = new DAPjs.WebUSB(this.device);
        this.dap       = new DAPjs.DAPLink(this.transport);
    }
}

另請注意, this不會自動綁定到實例,例如當使用實例方法作為事件處理程序時。 要確保它在所有情況下都綁定到實例,請在構造函數中調用Function.prototype.bind

this.connectDAP = this.connectDAP.bind(this);

如果你想省略this ,你需要在本地聲明變量,這可以很容易地使用解構來完成:

class MicroBitConnection {
    constructor(device) {
        this.device = device;

        this.connectDAP();
    }

    connectDAP() {
        const { device } = this;
        this.transport = new DAPjs.WebUSB(device);
        const { transport } = this;
        this.dap       = new DAPjs.DAPLink(transport);
    }
}

第三種選擇(不推薦)是使用with語句:

class MicroBitConnection {
    constructor(device) {
        this.device = device;
        this.transport = null;
        this.dap = null;
        this.connectDAP();
    }

    connectDAP() {
        with (this) {
            transport = new DAPjs.WebUSB(device);
            dap       = new DAPjs.DAPLink(transport);
        }
    }
}

我不確定最后一個版本是否符合您的期望,只是為了完整起見將其列出並讓您知道with語句的存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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