如果这些对象被创建但从未被销毁,您可以让构造函数为您维护一个数组并将随机函数挂钩到其中:
var CreateObject = (function() {
var created = [];
var CreateObject = function(name) {
this.name = name;
created.push(this);
};
CreateObject.random = function() {
return created[Math.floor(created.length * Math.random())];
}
return CreateObject;
}())
var bob = new CreateObject("Bob");
var john = new CreateObject("John");
var rob = new CreateObject("Rob");
var steven = new CreateObject("Steven");
CreateObject.random(); // CreateObject {name: "Rob"}
CreateObject.random(); // CreateObject {name: "Steven"}
CreateObject.random(); // CreateObject {name: "Rob"}
CreateObject.random(); // CreateObject {name: "John"}
// etc.
该技术也可以扩展为允许删除,但您必须以某种方式明确告诉构造函数正在删除对象。否则,您的随机函数不仅无法正常工作,而且还会出现内存泄漏。
(请注意,存储数组的并不是构造函数。它存储在构造函数可以访问的闭包中。)