Kunci objek wujud di luar panggilan fungsi tetapi tidak dalam skop fungsi
P粉133321839
P粉133321839 2023-09-12 13:57:28
0
1
516

Saya menggunakan fabric.js dan pada satu ketika saya menggunakan kod berikut:

canvas.on("object:modified", (opt) => {
  console.log(opt.action); //="scale"
  handleScaled(opt);
});

tetapi dalam handleScaled函数中opt.actionundefined:

function handleScaled(opt) {
  console.log(opt.action) //=undefined
  console.log(opt) //displays the whole opt object but there is no "action" in it
  //further handleScaled code
}

console.log(opt.action) 在函数调用之前会正确显示“scale”,但是当我在 handleScaled 中调用相同的内容时,opt.log(opt.action) 会正确显示“scale”。操作Tidak ditentukan.

Mengapa opt.action nampaknya tidak wujud dalam skop fungsi yang dipanggil, tetapi wujud sejurus sebelum panggilan?

Kod kerja yang betul hanya dipanggil apabila operasi "skala" handleScale:

canvas.on("object:modified", (opt) => {
  if (opt.action === "scale") {
    handleScaled(opt);
  }
});

P粉133321839
P粉133321839

membalas semua(1)
P粉356361722

Dalam kod anda, apabila anda memanggil handleScaled 函数之前记录 opt.action 时,它会正确显示“scale”,因为它正在访问 action传递给 canvas.on 事件处理程序的回调函数中 opt 对象的 code> 属性。当您在 handleScaled 函数中记录 opt.action 时,它显示为 undefined,因为 opt 对象被传递给handleScaled 函数是该对象的另一个实例。它没有 action 属性,因为它与之前记录的 opt objeknya berbeza.

Untuk menjadikan opt.action 可以在 handleScaled boleh diakses dalam fungsi, anda boleh mengubah suai kod seperti ini:

canvas.on("object:modified", (opt) => {
  console.log(opt.action); //="scale"
  handleScaled(opt);
});

function handleScaled(opt) {
  console.log(opt.action); // "scale" (should display correctly)
  // further handleScaled code
}

Dengan menambah atribut opt 对象直接传递给 handleScaled 函数,您可以在函数作用域内保留对其属性的访问权限。确保传递给 handleScaledopt 对象包含预期的 action.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan