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.action
undefiniert:
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); } });
在您的代码中,当您在调用
handleScaled
函数之前记录opt.action
时,它会正确显示“scale”,因为它正在访问action
传递给canvas.on
事件处理程序的回调函数中opt
对象的 code> 属性。当您在handleScaled
函数中记录opt.action
时,它显示为undefined
,因为opt
对象被传递给handleScaled
函数是该对象的另一个实例。它没有action
属性,因为它与之前记录的opt
对象不同。要使
opt.action
可以在handleScaled
函数中访问,您可以像这样修改代码:通过将
opt
对象直接传递给handleScaled
函数,您可以在函数作用域内保留对其属性的访问权限。确保传递给handleScaled
的opt
对象包含预期的action
属性。