我正在嘗試學習裝飾器概念
我正在這樣做
function calculateArea(length, width){
return length * width;
}
function checkData(fn){
return function(...args){
if(args.length != 2){
return false;
}
return fn(...args)
}
}
let checked = checkData(calculateArea(2,3));
我收到此錯誤
Uncaught TypeError: fn is not a function
此外,在這里回傳函式的目的是什么?
uj5u.com熱心網友回復:
代碼背后的想法是增強/包裝任何需要兩個引數的函式,方法是確保 false在引數數量不完全為 2 時回傳。
為了使您的代碼示例正常作業,您需要將函式的參考傳遞給,這將回傳執行上述操作的“豐富”函式,然后才呼叫它:calculateAreacheckdata
function calculateArea(length, width){
return length * width;
}
function fullName(firstName, lastName) {
return `${firstName} ${lastName}`;
}
function checkData(fn){
return function(...args){
if(args.length != 2){
return false;
}
return fn(...args)
}
}
let checked = checkData(calculateArea)(2,3);
console.log(checked);
let myName = checkData(fullName)('John', 'Doe');
console.log(myName);
使用這個概念可以減少代碼中的冗余。如您所見,我沒有在內部calculateArea或fullName函式中進行任何檢查,并且使用checkData我仍然可以輕松獲得false如果引數數量不完全是兩個則回傳的函式。
uj5u.com熱心網友回復:
let checked = checkData(calculateArea(2,3));
當你像這樣呼叫你的函式時,你實際上是calculateArea(2,3)首先呼叫它實際上是回傳你的結果而不是一個函式。然后將該值用作 checkData() 函式的引數,該函式會拋出上述錯誤。
現在要使其作業,您需要傳遞函式的參考
let checkedAreaParams = checkData(calculateArea);
console.log(checkedAreaParams)
/*
? (...args){
if(args.length != 2){
return false;
}
return fn(...args)
}
*/
console.log(checkedAreaParams(2,3)) // 6
希望這清楚!?
uj5u.com熱心網友回復:
.....
let checked = checkData(calculateArea(2,3));
引數“calculateArea(2,3)”首先運行,因此它回傳 (length*width) 的結果而不是函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450907.html
標籤:javascript
