成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

在對(duì)象里定義了一個(gè)XMLHttpRequest請(qǐng)求了,怎么在請(qǐng)求的回調(diào)中引用對(duì)象的『this』『神獸

boredream / 1073人閱讀

摘要:附,在設(shè)計(jì)模式看到的譯者注譯者注定義一個(gè)構(gòu)造函數(shù)時(shí),其默認(rèn)的對(duì)象是一個(gè)類(lèi)型的實(shí)例,其屬性會(huì)被自動(dòng)設(shè)置為該構(gòu)造函數(shù)本身。

問(wèn)題

XMLHttpRequest inside an object: how to keep the reference to “this”

且看代碼

</>復(fù)制代碼

  1. javascriptmyObject.prototye = {
  2. ajax: function() {
  3. this.foo = 1;
  4. var req = new XMLHttpRequest();
  5. req.open("GET", url, true);
  6. req.onreadystatechange = function (aEvt) {
  7. if (req.readyState == 4) {
  8. if(req.status == 200) {
  9. alert(this.foo); // reference to this is lost
  10. }
  11. }
  12. }
  13. };

onreadystatechange回調(diào)中再也引用不到主對(duì)象的this了,當(dāng)然就沒(méi)有辦法獲取this.foo變量了,有什么辦法可以在這個(gè)回調(diào)中繼續(xù)引用主對(duì)象呢

答案

最簡(jiǎn)單的辦法就是將主對(duì)象的this保存到局部變量中,

</>復(fù)制代碼

  1. javascriptmyObject.prototype = {
  2. ajax: function (url) { // (url argument missing ?)
  3. var instance = this; // <-- store reference to the `this` value
  4. this.foo = 1;
  5. var req = new XMLHttpRequest();
  6. req.open("GET", url, true);
  7. req.onreadystatechange = function (aEvt) {
  8. if (req.readyState == 4) {
  9. if (req.status == 200) {
  10. alert(instance.foo); // <-- use the reference
  11. }
  12. }
  13. };
  14. }
  15. };

如果我沒(méi)有猜錯(cuò)的話(huà),myObject是一個(gè)構(gòu)造函數(shù),現(xiàn)在你這么直接設(shè)置它的原型對(duì)象,最好還是將原型對(duì)象的constructor屬性(設(shè)置)恢復(fù)為myObject。

附,在<>看到的譯者注:
/*
*譯者注:定義一個(gè)構(gòu)造函數(shù)時(shí),其默認(rèn)的prototype對(duì)象是一個(gè)Object 類(lèi)型的實(shí)例,其constructor屬性會(huì)被自動(dòng)設(shè)置
*為該構(gòu)造函數(shù)本身。如果手工將其prototype 設(shè)置為另外一個(gè)對(duì)象,那么新對(duì)象自然不會(huì)具有原對(duì)象的constructor值,
*所以需要重新設(shè)置其constructor 值。
*/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85486.html

相關(guān)文章

  • 一步一步搭建前端監(jiān)控系統(tǒng):接口請(qǐng)求異常監(jiān)控篇

    摘要:參考一步一步搭建前端監(jiān)控系統(tǒng)錯(cuò)誤監(jiān)控篇用插件記錄網(wǎng)絡(luò)請(qǐng)求異常關(guān)于專(zhuān)注于微信小程序微信小游戲支付寶小程序和線(xiàn)上應(yīng)用實(shí)時(shí)監(jiān)控。 摘要: 如何監(jiān)控HTTP請(qǐng)求錯(cuò)誤? 作者:一步一個(gè)腳印一個(gè)坑 原文:搭建前端監(jiān)控系統(tǒng)(四)接口請(qǐng)求異常監(jiān)控篇 Fundebug經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有。 背景:市面上的監(jiān)控系統(tǒng)有很多,大多收費(fèi),對(duì)于小型前端項(xiàng)目來(lái)說(shuō),必然是痛點(diǎn)。另一點(diǎn)主要原因是,功能雖然...

    dreamtecher 評(píng)論0 收藏0
  • AJAX學(xué)習(xí)筆記

    摘要:的學(xué)習(xí)筆記是異步和的縮寫(xiě),它的作用是執(zhí)行異步的網(wǎng)絡(luò)請(qǐng)求。這就是一個(gè)格式的,向這個(gè)地址請(qǐng)求,將得到一個(gè)回調(diào)函數(shù),執(zhí)行就得到數(shù)據(jù)。 AJAX的學(xué)習(xí)筆記 AJAX是異步JavaScript和XML的縮寫(xiě),它的作用是執(zhí)行異步的網(wǎng)絡(luò)請(qǐng)求。因?yàn)镴S是線(xiàn)性同步,如果需要用戶(hù)向?yàn)g覽器發(fā)送一個(gè)請(qǐng)求,那么就需要等瀏覽器接收到了結(jié)果才能繼續(xù)運(yùn)行,如果發(fā)送到接受的時(shí)間太長(zhǎng),瀏覽器就會(huì)很長(zhǎng)時(shí)間處于假死狀態(tài),這樣...

    RobinTang 評(píng)論0 收藏0
  • 前端跨域之原因&&方案&&原理

    摘要:于是乎同源策略應(yīng)運(yùn)而生主要限制在于和無(wú)法讀取。怎么繞過(guò)同源策略首先一般來(lái)說(shuō)協(xié)議和端口造成的跨域問(wèn)題大部分方法是沒(méi)有辦法繞過(guò)的。二級(jí)域名是寄存在主域名之下的域名。當(dāng)主域名受到懲罰二級(jí)域名也會(huì)連帶懲罰。 前言 這是一道前端跨不過(guò)躲不掉面試必備的知識(shí),掙扎多年沒(méi)能做到刻骨銘心深入脊髓,只能好好寫(xiě)篇博文記錄起來(lái)了; 什么是跨域? 廣義來(lái)說(shuō),A域執(zhí)行的文檔腳本試圖去請(qǐng)求B域下的資源是不被允許的,...

    Zack 評(píng)論0 收藏0
  • 你不知道 XMLHttpRequest

    摘要:默認(rèn)參數(shù)為空字符串密碼,可選參數(shù),用于授權(quán)。默認(rèn)參數(shù)為空字符串備注如果不是有效的方法或地址不能被成功解析,將會(huì)拋出異常如果請(qǐng)求方法不區(qū)分大小寫(xiě)為或?qū)?huì)拋出異常重寫(xiě)由服務(wù)器返回的類(lèi)型。 本文詳細(xì)介紹了 XMLHttpRequest 相關(guān)知識(shí),涉及內(nèi)容: AJAX、XMLHTTP、XMLHttpRequest詳解、XMLHttpRequest Level 1、Level 2 詳解 XHR...

    ckllj 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

boredream

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<