La clé d'objet existe en dehors de l'appel de fonction mais pas dans la portée de la fonction
P粉133321839
P粉133321839 2023-09-12 13:57:28
0
1
496

J'utilise fabric.js et à un moment donné j'ai utilisé le code suivant :

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

mais en handleScaled函数中opt.actionundéfini :

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”。操作Indéfini.

Pourquoi opt.action ne semble-t-il pas exister dans le cadre de la fonction appelée, mais existe juste avant l'appel ?

Le code de fonctionnement correct n'est appelé que lorsque l'opération est "à l'échelle" handleScale :

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

P粉133321839
P粉133321839

répondre à tous(1)
P粉356361722

Dans votre code, lorsque vous appelez handleScaled 函数之前记录 opt.action 时,它会正确显示“scale”,因为它正在访问 action传递给 canvas.on 事件处理程序的回调函数中 opt 对象的 code> 属性。当您在 handleScaled 函数中记录 opt.action 时,它显示为 undefined,因为 opt 对象被传递给handleScaled 函数是该对象的另一个实例。它没有 action 属性,因为它与之前记录的 opt l'objet est différent.

Pour rendre opt.action 可以在 handleScaled accessible dans une fonction, vous pouvez modifier le code comme ceci :

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
}

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal