Heim  >  Fragen und Antworten  >  Hauptteil

Der Objektschlüssel existiert außerhalb des Funktionsaufrufs, aber nicht innerhalb des Funktionsumfangs

Ich verwende fabric.js und habe irgendwann den folgenden Code verwendet:

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

aber in handleScaled函数中opt.actionundefiniert:

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”。操作Undefiniert.

Warum scheint opt.action nicht im Rahmen der aufgerufenen Funktion zu existieren, sondern unmittelbar vor dem Aufruf?

Korrekter Arbeitscode wird nur aufgerufen, wenn die Operation „skaliert“ ist handleScale:

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

P粉133321839P粉133321839425 Tage vor489

Antworte allen(1)Ich werde antworten

  • P粉356361722

    P粉3563617222023-09-13 00:36:00

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

    要使 opt.action 可以在 handleScaled 函数中访问,您可以像这样修改代码:

    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
    }
    

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

    Antwort
    0
  • StornierenAntwort