摘要:附,在設計模式看到的譯者注譯者注定義一個構造函數時,其默認的對象是一個類型的實例,其屬性會被自動設置為該構造函數本身。
問題
XMLHttpRequest inside an object: how to keep the reference to “this”
且看代碼
javascriptmyObject.prototye = { ajax: function() { this.foo = 1; var req = new XMLHttpRequest(); req.open("GET", url, true); req.onreadystatechange = function (aEvt) { if (req.readyState == 4) { if(req.status == 200) { alert(this.foo); // reference to this is lost } } } };
在onreadystatechange回調中再也引用不到主對象的this了,當然就沒有辦法獲取this.foo變量了,有什么辦法可以在這個回調中繼續引用主對象呢
答案最簡單的辦法就是將主對象的this保存到局部變量中,
javascriptmyObject.prototype = { ajax: function (url) { // (url argument missing ?) var instance = this; // <-- store reference to the `this` value this.foo = 1; var req = new XMLHttpRequest(); req.open("GET", url, true); req.onreadystatechange = function (aEvt) { if (req.readyState == 4) { if (req.status == 200) { alert(instance.foo); // <-- use the reference } } }; } };
如果我沒有猜錯的話,myObject是一個構造函數,現在你這么直接設置它的原型對象,最好還是將原型對象的constructor屬性(設置)恢復為myObject。
附,在<
/*
*譯者注:定義一個構造函數時,其默認的prototype對象是一個Object 類型的實例,其constructor屬性會被自動設置
*為該構造函數本身。如果手工將其prototype 設置為另外一個對象,那么新對象自然不會具有原對象的constructor值,
*所以需要重新設置其constructor 值。
*/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85486.html
摘要:參考一步一步搭建前端監控系統錯誤監控篇用插件記錄網絡請求異常關于專注于微信小程序微信小游戲支付寶小程序和線上應用實時監控。 摘要: 如何監控HTTP請求錯誤? 作者:一步一個腳印一個坑 原文:搭建前端監控系統(四)接口請求異常監控篇 Fundebug經授權轉載,版權歸原作者所有。 背景:市面上的監控系統有很多,大多收費,對于小型前端項目來說,必然是痛點。另一點主要原因是,功能雖然...
摘要:于是乎同源策略應運而生主要限制在于和無法讀取。怎么繞過同源策略首先一般來說協議和端口造成的跨域問題大部分方法是沒有辦法繞過的。二級域名是寄存在主域名之下的域名。當主域名受到懲罰二級域名也會連帶懲罰。 前言 這是一道前端跨不過躲不掉面試必備的知識,掙扎多年沒能做到刻骨銘心深入脊髓,只能好好寫篇博文記錄起來了; 什么是跨域? 廣義來說,A域執行的文檔腳本試圖去請求B域下的資源是不被允許的,...
摘要:默認參數為空字符串密碼,可選參數,用于授權。默認參數為空字符串備注如果不是有效的方法或地址不能被成功解析,將會拋出異常如果請求方法不區分大小寫為或將會拋出異常重寫由服務器返回的類型。 本文詳細介紹了 XMLHttpRequest 相關知識,涉及內容: AJAX、XMLHTTP、XMLHttpRequest詳解、XMLHttpRequest Level 1、Level 2 詳解 XHR...
閱讀 2546·2023-04-26 00:57
閱讀 917·2021-11-25 09:43
閱讀 2226·2021-11-11 16:55
閱讀 2223·2019-08-30 15:53
閱讀 3599·2019-08-30 15:52
閱讀 1463·2019-08-30 14:10
閱讀 3383·2019-08-30 13:22
閱讀 1216·2019-08-29 11:18