如何在单例 class 中调用兄弟函数?
how do I call sibling functions in a singleton class?
在下面的代码中,.refresh
可以调用 .add
,但我得到 Uncaught TypeError: undefined is not a function
我的猜测是因为它在创建 class 时没有定义,但如果这是真的,在不复制代码的情况下,是否有办法从同一个 [=21] 调用同级 public 函数=]?
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
那里得到的。
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;
})();
在下面的代码中,.refresh
可以调用 .add
,但我得到 Uncaught TypeError: undefined is not a function
我的猜测是因为它在创建 class 时没有定义,但如果这是真的,在不复制代码的情况下,是否有办法从同一个 [=21] 调用同级 public 函数=]?
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
那里得到的。
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;
})();