我的目标是根据一些无关紧要的参数来获得随机对象。

function CreateObject(name) = {
this.name = name
};

var bob = CreateObject("Bob");
var john = CreateObject("John");
var rob = CreateObject("Rob");
var steven = CreateObject("Steven");


我是否需要将每个对象插入一个数组,或者如果我有100个以上的对象,还有更好的方法吗?

最佳答案

如果创建了这些对象但从未销毁它们,则可以让构造函数为您维护一个数组并将一个随机函数挂接到该数组中:

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.


还可以扩展此技术以允许删除,但是您必须以某种方式显式告知构造函数正在删除对象。否则,不仅随机函数将无法正常工作,而且还会发生内存泄漏。

(请注意,存储数组的并不是构造函数,它存储在构造函数可以访问的闭包中。)

09-25 16:59