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
答案 0 :(得分: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();
答案 1 :(得分:0)
您必须删除呼叫周围的括号:
try{
this.callbackfunction();
}
catch(e)
{
alert(e);
}
并传递没有引号的函数:
function displayDate()
{
alert("displayDate");
myNamespace.dateController(displayDateFromController);
};