1

プロトタイプ オブジェクトで作成されたオブジェクトを削除しようとしています。削除が機能していないようです。delete の呼び出し後、オブジェクトはまだそこにあります...オブジェクトは次の呼び出しによって作成されます。

utils.createWithProto = function (o) {
    function F() {}
    F.prototype = o;
    return new F();
};

以下は、オブジェクトを作成するために使用されます。

// Create a new object using DashboardControl as the prototype
// A unique ID is set in newControl.config.controlId if it was not passed in config
var proto = new DashboardControl(config);
var newControl = Utils.createWithProto(proto);

// Create a collection of Volume models
newControl.volumeCollection = new VolumeCollection();
newControl.volumeCollection.init(newControl.config);

// Create a view
newControl.volumeView = new VolumeView(newControl, newControl.volumeCollection);

volumeCollection および volumeView アイテムで手動で削除を呼び出していますが、これは正常に機能します。しかし、最後のステップとしてのオブジェクト自体の削除は機能していません:

deleteObject: function(object) {
    object.volumeCollection.stop();
    delete object.volumeCollection;
    object.volumeView.stop();
    delete object.volumeView;
    //delete object.config;
    delete object.prototype;
    delete object;
    object = null;
}

この派生オブジェクトを削除するにはどうすればよいですか?

4

3 に答える 3

3

deleteオブジェクトのプロパティのみを削除します。variableの値を削除したい場合は、スコープ外にするか、新しい値を割り当てます。

オブジェクトを参照するすべてのプロパティと変数がなくなると、オブジェクトはガベージ コレクションされます。

于 2013-06-05T16:21:29.233 に答える
1

プロパティがオブジェクト参照の場合、delete コマンドはプロパティを削除しますが、オブジェクトは削除しません。オブジェクトへの他の参照がない場合、ガベージ コレクターがそのオブジェクトを処理します。

于 2013-06-05T16:22:00.433 に答える
1

これは削除が機能するケースです:

var b = [1,2,3];

delete b[2];          // b becomes [3, 4, undefined]

b で使用されているメモリをクリアしたい場合は、単純に何も再割り当てしません。

 b = null;

それ以降は、ブラウザのガベージ コレクタが処理します。

于 2013-06-05T16:23:41.210 に答える