亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法讀取javascript中未定義的屬性“clearRect”

無法讀取javascript中未定義的屬性“clearRect”

皈依舞 2023-11-02 21:14:36
我看到這個問題以前被問過,但它并沒有解決我的問題!我是 JavaScript 新手,我幾乎花了一天時間嘗試解決它,但仍然無法解決。我有一個這樣的類和函數:let playerTank = {width: 80, height: 80, speed: 2};class Tank {    constructor(canvas) {        this.canvas = canvas;        this.ctx = canvas.getContext("2d");    }    draw() {        this.ctx.drawImage(.....);        this.ctx.stroke();    }    update(e) {        if (e.keyCode == 37) {            this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);            this.draw();            // do something ...        }    }}function main() {    let canvas = document.getElementByID("my-canvas");        let tank = new Tank(canvas);    tank.draw();    window.addEventListener("keydown", tank.update, true);    window.addEventListener("keyup", tank.update, false);}main();這是我的問題!當我單擊該鍵時,我會收到以下錯誤:can't read property 'clearRect' of undefinedcan't read property 'draw' of undefined我實在不明白為什么不能訪問同一個類中的屬性和函數?
查看完整描述

1 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

你失去了上下文:


class Tank {

    draw() {

      console.log('draw');

    }

    update() {

       this.draw();

    }

}


const tank = new Tank();


// Call method of instance. Works

tank.draw(); 


// Set this method as listener. 

// Dont works, cause method called from event context (window)

window.addEventListener("event1", tank.update, true); 


// Set anonimous listener, which call method. Works

window.addEventListener("event2", () => tank.update(), true); 


// Set method as listener and bind right context. Also works

window.addEventListener("event3", tank.update.bind(tank), true); 


window.dispatchEvent(new Event("event1"));

window.dispatchEvent(new Event("event2"));

window.dispatchEvent(new Event("event3"));


查看完整回答
反對 回復 2023-11-02
  • 1 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號