私は Fabric.js を使用していて、ある時点で次のコードを使用しました:
リーリーしかし、handleScaled
関数 opt.action
は未定義です:
console.log(opt.action)
には「scale」が正しく表示されますが、handleScaled
で同じものを呼び出すと、opt .log(opt .action) を実行すると、「スケール」が正しく表示されます。オペレーション
は未定義です。
opt.action が呼び出された関数のスコープ内に存在しないように見えるのに、呼び出しの直前に存在するのはなぜですか?
handleScale を呼び出します:
ああああ
コードでは、
handleScaled
関数を呼び出す前にopt.action
をログに記録すると、action
にアクセスしているため、「scale」が正しく表示されます。canvas.on
イベント ハンドラーのコールバック関数に渡されるopt
オブジェクトの code> 属性。opt.action
をhandleScaled
関数に記録すると、opt
オブジェクトがに渡されるため、
unknownとして表示されます。 handleScaled
関数は、このオブジェクトの別のインスタンスです。これは、以前に記録されたopt
オブジェクトとは異なるため、action
属性を持ちません。handleScaled
関数でopt.action
にアクセスできるようにするには、コードを次のように変更します。opt
オブジェクトをhandleScaled
関数に直接渡すことにより、関数スコープ内でそのプロパティへのアクセスを維持できます。handleScaled
に渡されるopt
オブジェクトに、予期されるaction
プロパティが含まれていることを確認してください。