这是我的问题:
我有一个继承对象(类)函数,我用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 = { }
我似乎无法在网上找到任何相关信息。我没有成功地尝试了所有的想法。
答案 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不可迭代,因此它们在您的情况下无用。