[英]what's the correct way to destroy a javascript function?
我對面向對象的Javascript不太熟悉,但是可以說我有一個實例化的函數..?
那是正確的術語嗎?
該函數包含一個帶有附加事件偵聽器的XMLHttpRequest
,處置該函數的正確方法是什么?
function foo() {
var self = this;
self.message = "received response";
self.url = 'someUrl';
self.req = new XMLHttpRequest();
self.req.open("POST", self.url, true);
self.req.onload = function () {
console.log(self.message); // Unable to get property 'message' of
// undefined or null reference
};
self.req.send();
self = null;
}
var foo = new foo();
我意識到這不是我應該如何中止XMLHttpRequest
而僅僅是一個示例,問題是我應該如何徹底銷毀一個函數以及它產生或創建的所有函數?
編輯
澄清一下,我對self.req.onload
感到困惑,當self
= null
時,它怎么可能存在? 我的想法是self.req
不再存在,因此它也發生了,但是事實並非如此
是的,JavaScript函數是對象,因此將它們實例化 。 輸入作用域時,函數聲明會創建一個函數,對它們進行求值時,函數聲明也會創建一個函數。
但是,在JavaScript中,您不會處理對象。 您只需讓它們超出范圍(刪除對它們的所有引用),然后垃圾收集器將照顧它們。 例如,當您foo.req.abort()
請求或響應到達,並且foo.req.onload
不再可訪問時,您的偵聽器函數將被垃圾回收。
我會這樣寫一個例子:
function foo () {
var message = "received response";
var url = 'someUrl';
var req = new XMLHttpRequest();
req.open("POST", url, true);
req.onload = function () {
console.log(message);
};
req.send();
}
// No need to instantiate foo, just call it when you want to make your request
// No need for foo to "remember" variables.
foo();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.