簡體   English   中英

Javascript-從名稱空間回調函數問題?

[英]Javascript- Callback function issue from namespace?

var myNamespace = {
    dateController: {}
};

myNamespace.dateController = function(callback) {
    this.callbackfunction = callback;
    try {
        [this.callbackfunction]();
    } catch (e) {
        alert(e);
    }
};

function displayDate() {
    alert("displayDate");
    myNamespace.dateController("displayDateFromController");
};

function displayDateFromController() {
    alert("In displayDateFromController");
};    

這段代碼給了我TypeError: ["displayDateFromController"] is not a function錯誤。 什么可能是根本原因,也可能是此問題的解決方案。

為什么dateController無法確定displayDateFromController的功能。

我已經在http://www.w3schools.com/js/tryit.asp?filename=tryjs_events上厭倦了

您需要將實際函數傳遞給datecontroller方法,而不是String

var myNamespace = {
    dateController: {}
};

myNamespace.dateController = function (callback)
{
 this.callbackfunction = callback;
 try{
    //remove [] surrounding function
    this.callbackfunction();
    }
    catch(e)
    {
      alert(e);
    }
};

//Declare this method prior to displayDate
function displayDateFromController()
{
    alert("In displayDateFromController");
};

function displayDate()
{
    alert("displayDate");
    //Pass function instead of string
    myNamespace.dateController(displayDateFromController); 
};

displayDate();

工作示例: http : //jsfiddle.net/RDMHV/

如果仍然需要String的靈活性:

var myNamespace = {
    dateController: {}
};

myNamespace.dateController = function (callback)
{
 this.callbackfunction = this[callback];
 try{
    this.callbackfunction();
    }
    catch(e)
    {
      alert(e);
    }
};

myNamespace.displayDateFromController = function(){
   alert("In displayDateFromController");
};

function displayDate()
{
    alert("displayDate");
    myNamespace.dateController("displayDateFromController");
};

displayDate();

工作示例 http://jsfiddle.net/RDMHV/1/

您必須刪除通話周圍的括號:

try{
    this.callbackfunction();
}
catch(e)
{
    alert(e);
}

並傳遞不帶引號的函數:

function displayDate()
{
    alert("displayDate");
    myNamespace.dateController(displayDateFromController);
 };

暫無
暫無

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

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