在以下代码中,.refresh
可以致电.add
,但我得到Uncaught TypeError: undefined is not a function
我的猜测是因为它没有在创建类时定义,但如果这是真的,没有复制代码,有没有办法从同一个类调用兄弟公共函数?
var fileSelector = (function () {
var self = this;
function callback (data,status,xhr) {
$("#File_Selector_Container").html(data);
utils.setItem ("fileSelector", "TRUE");
}
return {
refresh : function () {
if (utils.getItem ("fileSelector") == "TRUE") {
self.add();
}
},
add : function () {
$.get(script_name ,"AddFileSelector",callback,"html");
},
remove : function () {
$("#File_Selector_Container").html("");
}
}
})();
我是从Simplest/Cleanest way to implement singleton in JavaScript?开始的,我现在无法找到它,但是我从self=this
获得了另一个问题。
答案 0 :(得分:1)
this
(因此self
)只是引用全局对象(即window
)。这就是您收到错误的原因,没有全局add
功能。我建议您阅读MDN documentation以了解this
的工作原理。
一种解决方案是保留对您要返回的对象的引用并改为使用它:
var fileSelector = (function () {
function callback (data,status,xhr) {
$("#File_Selector_Container").html(data);
utils.setItem ("fileSelector", "TRUE");
}
var fileSelector = {
refresh : function () {
if (utils.getItem ("fileSelector") == "TRUE") {
fileSelector.add();
}
},
add : function () {
$.get(script_name ,"AddFileSelector",callback,"html");
},
remove : function () {
$("#File_Selector_Container").html("");
}
};
return fileSelector;
})();