在运行时更改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 = {..};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句