介绍:
我有一些创建单例的遗留代码:
define(['backbone', 'MyModel'], function (Backbone, MyModel) {
var MyCollection = Backbone.Collection.extend({
model: MyModel,
initialize: function () {
//...
}
});
return new MyCollection();
});
出于测试目的,我需要生成新实例以将它们作为依赖项注入。
问题:
有没有办法在不修改原始代码的情况下生成单例的新实例?
我做了什么:
我提出了一个解决方案:将类添加为实例的属性
initialize: function () {
this.ClassObject = MyCollection;
//...
}
然后实例化它
var myCollection = require('myCollection');
var myCollectionInstance = new myCollection.ClassObject();
这个解决方案修改了类,我想避免它。
我还尝试创建单例的副本:
function generateNewCollection() {
var F = function () {};
F.prototype = myCollection;
return new F();
}
它会生成一个新实例,但不会创建其依赖项的新实例,因此对于下一次测试,环境仍然很脏。