继承对象。遍历所有对象

时间:2015-02-14 13:42:46

标签: javascript oop javascript-objects

这是我的问题:

我有一个继承对象(类)函数,我用x许多对象填充,如下所示:

function Booking (doc_id, arrival_date, supplier_amount, client_amount, currency, profit, calculated_profit, currency_rate) {
    this.doc_id = doc_id;
    this.arrival_date = arrival_date;
    this.supplier_amount = supplier_amount;
    this.client_amount = client_amount;
    this.currency = currency;
    this.profit = profit;
    this.calculated_profit = calculated_profit;
    this.exchange_rate = currency_rate;
    if(pastDate(this.arrival_date)) {
        past_date: true;
    }
    else {
        past_date: false;
    }
} 

是否可以遍历所有对象? 我希望有一个迭代所有Booking对象的函数,并使用结果填充dataTables表。 我想这个函数必须由

定义
Booking.prototype = { }

我似乎无法在网上找到任何相关信息。我没有成功地尝试了所有的想法。

1 个答案:

答案 0 :(得分:1)

要迭代所有Booking个实例,您必须在某处存储对它们的引用:

var Booking = (function() {
    var instances = []; // Array of instances
    function Booking(foo) {
        if (!(this instanceof Booking)) return; // Called without `new`
        instances.push(this); // Store the instance
        this.foo = foo; // Your current code
    }
    Booking.prototype.whatever = function() {
        // You can use `instances` here
    }
    return Booking;
})();

但是等等:不要那样(除非它是绝对必要的)。

上面的代码有一个很大的问题:由于Booking实例在instances中被引用,垃圾收集器不会杀死它们,即使它们没有在其他任何地方被引用。

因此,每次创建实例时,都会生成memory leak

ECMAScript 6引入了WeakSet,它允许您将弱持有的对象存储在集合中,以便垃圾收集器在未在其他任何地方引用时将终止它们。但WeakSet s不可迭代,因此它们在您的情况下无用。