我不是一個Javascript人正常的,但我一直在潛水,閱讀Douglas Crockford's book,寫一些瑣碎的,有用的花絮作爲Chrome擴展和Node.js(注意,這個問題是不是其中任何)。我試圖找出如何保留一個對象的引用來啓動一個AJAX請求,也就是說:一旦我設置了onload事件處理程序(這是來自Chrome擴展中,所以我'中號使用基XMLHttpRequest對象),是否有任何方式,我可以返回參考MyObject
在下面的例子:Javascript:如何保留對處理程序中的請求發起者的引用?
MyObject.prototype = {
PerformAction: function() {
this.Request = new XMLHttpRequest();
this.Request.open("GET", this.ConstructUrl(), true);
// From within ActionResultHandler, 'this' will always be the XMLHttpRequest
this.Request.onload = this.ActionResultHandler,
this.Request.send(null);
}
}
這樣做究竟是要分配this
成爲請求對象本身,如果我簡單地引進的包裝:
this.Request.onload = function() { ActionResultHandler() };
那麼,那只是不會做什麼,因爲ActionResultHandler現在超出了範圍。我在這裏問的原因是因爲我只發現了調用者操縱的微不足道的情況(例如,在函數內部操縱this
引用的內容),但鑑於面向對象的Javascript和AJAX幾乎無處不在,必須是一個已知的簡單問題,但我的Google-fu在這裏讓我失望。在C#中,事件是在任何依附於它們的人的情況下調用的,而不是事件發生的對象,所以這不會每天都出現。也許有更好的JS模式可以完全避免這個問題?
我真的在晚上太晚了(讀:醉酒)正確回答你的問題,但也許你可以享受這些文章:http://www.digital-web.com/articles/scope_in_javascript/和http: //www.quirksmode.org/js/this.html – 2010-07-07 20:47:07
請參見[Function.prototype.bind](http://www.google.com/search?hl=zh-CN&q=function.prototype.bind&aq=f&aqi=&aql=&oq =&gs_rfai =)和http://stackoverflow.com/questions/3018943/javascript-object-binding-problem-inside-of-function-prototype-definitions/3019431#3019431 – Anurag 2010-07-07 21:24:45
盡我所愛quirksmode.org,該鏈接實際上並不包括申請/電話,這是我所需要的(儘管第一個是這樣)。謝謝! – 2010-07-07 21:45:40