我尝试创建一个可以在实例化时删除自身的方法。
经过几次尝试失败后,我最终写下了这个邪恶的rem()
var g = function () {
this.rem = function () {
var _instance = this;
setTimeout(function () {
console.log('_instance before:', _instance, 'scope:', this);
delete _instance;
console.log('_instance after:', _instance);
}, 10);
return this;
};
return this;
}
我知道它看起来很难看。但这对我来说有点奇怪,这也不起作用。在匿名函数内部,范围为window
,_instance
变量似乎也指向所需的实例。
var t = new g();
t.rem();
输出:
_instance before: g {asdf: 3, rem: function}, scope: Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…}
_instance after: g {asdf: 3, rem: function}
它不起作用的原因是什么?
感谢。
答案 0 :(得分:2)
你尝试过这样的事吗?
function myFunction() {
// do the actions
delete myFunction;
};
myFunction();
答案 1 :(得分:1)
不幸的是,你的方法不起作用。删除_instance时,您将删除对象的引用,而不是对象本身。还有另一个对同一对象(t)的引用,因此该对象不会被浏览器垃圾收集。而不是t.rem();
你应该只使用t = null;
,浏览器将在适当的时候摆脱对象(假设没有其他引用)。