1
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

4

2 回答 2

2

您需要将实际函数传递给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/

于 2013-06-03T08:44:11.820 回答
0

您必须删除 call 周围的括号:

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

并传递不带引号的函数:

function displayDate()
{
    alert("displayDate");
    myNamespace.dateController(displayDateFromController);
 };
于 2013-06-03T08:42:12.843 回答