在运行时更改
JavaScript实现的最佳方法是什么?
我有一个Web应用程序,它通过SignalR连接到服务器.
如果在运行时使用SignalR连接到服务器有任何问题,我想更改服务功能实现以使用常规XHR.
我有一个带有以下功能的js文件通过SignalR连接:
function initializeConnection() {
// Initialize connection using SignalR
}
function sendEcho() {
// Sending echo message using signalR
}
另一个具有相同功能的js文件通过XHR进行连接:
function initializeConnection() {
// Initialize connection using XHR
}
function sendEcho() {
// Sending echo message using XHR
}
我知道不可能同时加载它们.
我知道我可以在每个函数中使用一个带有切换的文件.
我想也许我可以通过加载和放大来切换这些文件.在运行时卸载它们.这可能吗?如果是这样,这是解决此类问题的最佳方式吗?
在运行时提供不同实现的最佳方法是什么?
最佳答案 一种方法是将两个实现定义为具有相同签名的对象,并将命名空间设置为变量:
;var MyStuff = {
//SignalR
SignalR: {
initializeConnection: function(){console.log('SignalR.initializeConnection()')},
sendEcho: function(){console.log('SignalR.sendEcho()')}
},
//XHR
XHR: {
initializeConnection: function(){console.log('XHR.initializeConnection()')},
sendEcho: function(){console.log('XHR.sendEcho()')}
}
};
//Do whatever check you want to
var mNamespace = (1 === 2) ? MyStuff.SignalR : MyStuff.XHR;
//Call the instance
mNamespace.initializeConnection();
您还可以将它们分成两个文件,并将它们动态添加到MyStuff:
//File 1
;var MyStuff = (MyStuff === undefined) ? {} : MyStuff;
MyStuff.SignalR = {..};
//File 2
;var MyStuff = (MyStuff === undefined) ? {} : MyStuff;
MyStuff.XHR = {..};