JavaScript功能相同,不同的实现决定了runtme

在运行时更改
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 = {..};
点赞