{console.log(opt.action);//="scale"handleScaled (opt);});但是在handleScaled函數中opt.action未定義:functionhandleScaled(op"> 物件鍵存在於函數呼叫之外,但不在函數作用域內-PHP中文網路問答
物件鍵存在於函數呼叫之外,但不在函數作用域內
P粉133321839
P粉133321839 2023-09-12 13:57:28
0
1
430

我正在使用fabric.js,並且在某一時刻我使用了以下程式碼:

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

但是在handleScaled函數中opt.action未定義:

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」。操作未定義。

為什麼opt.action似乎不存在於被呼叫函數的範圍內,但卻恰好在呼叫之前就存在?

正確的工作程式碼僅在操作為「scale」時呼叫handleScale

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

P粉133321839
P粉133321839

全部回覆 (1)
P粉356361722

在您的程式碼中,當您在呼叫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屬性。

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!