簡體   English   中英

強制傳遞一個匿名函數,該函數將對象返回為javascript中的參數

[英]Enforce passing a anonymous function that returns an object as a parameter in javascript

我有以下代碼

1)  var x = {};
    x.data = {name: 'name', lname: 'lname'};
    x.someOtherData = ['blah','blah','irrelevant'];
    aFunction(x);

因此,我多次調用上述語句組,語句的順序當然很重要。 有時我忘記做最后一條語句aFunction(x),這使我很頭疼,所以我做了以下工作:

2) aFunction(function(){
    var x = {};
    x.data = {name: 'name', lname: 'lname'};
    x.someOtherData = ['blah','blah','irrelevant'];
    return x; 
   }());                     

哪個可行,我很好奇我的函數方法aFunction中是否有一種方法強制傳遞的參數必須是匿名函數。 我要從該匿名函數返回一個對象,因此以下操作顯然不起作用

3) function aFunction(x) {
    if(x.constructor == Function) {
      alert('yay you're doing it right'); 
    } else { 
     alert('nay, you're doing it wrong'); //this is what happens given that x.constructor == Object
   }
}

我知道我可以執行以下操作,並且上面的檢查將起作用,但是我想將所有邏輯放在括號內的Function參數中,如代碼片段2所示:

4) var z =  function(){
   var x = {};
   x.data = {name: 'name', lname: 'lname'};
   x.someOtherData = ['blah','blah','irrelevant'];
   return x; 
  };
  aFunction(z);  

有任何想法嗎?

更新:

沒關系,我想通了。 我不能像現在那樣立即調用匿名函數,而不能在aFunction方法中調用它。 當然,可以幫助您在堆棧溢出中寫出您的問題,從而使問題和解決方案更加清晰。 仍然對其他人如何解決類似問題持開放態度。 設計模式等

解:

aFunction(function(){
var x = {};
x.data = {name: 'name', lname: 'lname'};
x.someOtherData = ['blah','blah','irrelevant'];
return x; 

});

function aFunction(x) {
if(x.constructor == Function) {
      alert('yay you're doing it right'); 
      x(); //call it here
    } else { 
     alert('nay, you're doing it wrong'); 
   }

}

我很好奇我的函數方法aFunction是否有一種強制執行的方法,即所傳遞的參數必須是匿名函數。

但是您沒有傳遞匿名函數。 您正在調用匿名函數並傳遞結果。

您可以傳遞一個函數(而不是調用函數的結果),然后在aFunction(x)測試x是一個函數,然后調用它以獲取要使用的值/對象:

function aFunction(x) {
    if(typeof x === "function") {
        var workingValue = x();
    }
}

但這當然不能確保傳入的函數將以正確的格式返回值。 同樣,它不能確保它是一個匿名函數。

您的2號語法就可以了,它的優點是將任何工作變量都保留在當前范圍之外(假設不會破壞某些內容),但是要達到您確定的目標,即確保您不要忘記調用aFunction()在其他處理結束時,嗯... 我的看法是,這只會使其他人難以閱讀代碼。

編輯:剛看到您更新的問題,您決定去做我上面提到的事情(似乎您在回答的同時正在更新)。 認真地說,我真的認為這是一種糟糕的設計模式,我只是將其作為一種假設的解決方案而提及-我認為我一開始並沒有明確指出我實際上並沒有推薦它。

我認為您的原始數字1版本是最好的方法,或者,如果您必須使用某個功能,那么數字2版本也可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM