Fungsi JavaScript tidak mempunyai nilai pulangan
P粉310931198
P粉310931198 2023-09-06 21:39:23
0
1
413

Ini mungkin sesuatu yang sangat mudah dan bodoh, tetapi mengapa ia tidak mengembalikan apa-apa? Saya mempunyai kaedah kelas mudah ini:

checkCollision(event) {
        let eventX = event.clientX - canvasRect.left;
        let eventY = event.clientY - canvasRect.top;
        if (this.centerX - eventX <= this.radiusX && this.centerX - eventX >= (this.radiusX/-1) && this.centerY - eventY <= this.radiusY && this.centerY - eventY >= (this.radiusY/-1)) {
            console.log(true);
            return true;
        } else {
            console.log(false);
            return false;
        }
    }

Tetapi apabila dijalankan dalam pelayar, outputnya ialah

> obj.checkCollision({clientX: 200, clientY: 200})
false
<- undefined

Mengapa ia tidak mengembalikan apa-apa? console.log sedang berjalan tetapi tiada nilai pulangan

P粉310931198
P粉310931198

membalas semua(1)
P粉198814372

Saya menambah beberapa nilai arbitrari pada pembolehubah yang anda gunakan, tetapi saya dapat membuat kod anda berfungsi seperti ini:

const canvasRect = { left: 50, top: 50 };

const obj = {
  centerX: 100,
  centerY: 100,
  radiusX: 100,
  radiusY: 100,

  checkCollision(event) {
    let eventX = event.clientX - canvasRect.left;
    let eventY = event.clientY - canvasRect.top;
    if (
      this.centerX - eventX <= this.radiusX &&
      this.centerX - eventX >= this.radiusX / -1 &&
      this.centerY - eventY <= this.radiusY &&
      this.centerY - eventY >= this.radiusY / -1
    ) {
      return true;
    } else {
      return false;
    }
  },
};

console.log(obj.checkCollision({ clientX: 200, clientY: 200 }));
// >>> True

Selain itu, sedikit petua. Apabila anda secara eksplisit mengembalikan truefalse berdasarkan ungkapan Boolean, anda juga boleh terus mengembalikan ungkapan Boolean itu sendiri.

const canvasRect = { left: 50, top: 50 };

const obj = {
  centerX: 100,
  centerY: 100,
  radiusX: 100,
  radiusY: 100,

  checkCollision(event) {
    let eventX = event.clientX - canvasRect.left;
    let eventY = event.clientY - canvasRect.top;
    return (
      this.centerX - eventX <= this.radiusX &&
      this.centerX - eventX >= this.radiusX / -1 &&
      this.centerY - eventY <= this.radiusY &&
      this.centerY - eventY >= this.radiusY / -1
    );
  },
};

console.log(obj.checkCollision({ clientX: 200, clientY: 200 }));
// >>> True
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan