6
獲取對象的原型很容易,但是有什麼方法可以獲得具有特定原型的所有實例嗎?我可以在JavaScript中獲取原型的所有實例嗎?
事情是這樣的:
var allAnimals = Animal.prototype.getInstances();
人們可以編寫自定義代碼保持實例化對象的軌道,但我很感興趣,是否有這方面的任何內置的方法。
獲取對象的原型很容易,但是有什麼方法可以獲得具有特定原型的所有實例嗎?我可以在JavaScript中獲取原型的所有實例嗎?
事情是這樣的:
var allAnimals = Animal.prototype.getInstances();
人們可以編寫自定義代碼保持實例化對象的軌道,但我很感興趣,是否有這方面的任何內置的方法。
你可以得到對窗口中創建這樣
var o = [];
(for i in window)
{
if(window[i] instanceof Animal) o.push(window[i]);
}
但是這個代碼的情況下,並沒有得到它尚未在窗口創建的實例... 你可以Animal
創建方法從創建實例,並將其保存在集合中:
+function() {
var AnimalInstances = [];
Animal = function (flag) {
if (!flag) throw new Error("Invalid Instantiation");
};
Animal.Create = function() {
var o = new Animal(true);
AnimalInstances.push(o);
return o;
};
Animal.GetInstances = function() {
return AnimalInstances;
};
}();
或:
+function() {
var AnimalInstances = [];
Animal = function() {
AnimalInstances.push(this);
}
Animal.GetInstances = function() {
return AnimalInstances;
};
}();
可以在A.instances
後
var one = new A(10), two=new A('123');
嘗試這樣的事情
function A(f){
this.field = f;
A.instances.push(this);
}
A.instances = [];
因此將包含兩個創建的對象
你必須明確地做它的類。類不會自動維護所有實例的列表。 – Barmar
這是內存泄漏。 – SLaks
您可以拍攝堆快照(v8讓你這樣做),然後檢查。理想情況下,您只需在基礎構造函數中實現對象跟蹤。 –