摘要:附,在設(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ù)制代碼
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回調(diào)中再也引用不到主對(duì)象的this了,當(dāng)然就沒(méi)有辦法獲取this.foo變量了,有什么辦法可以在這個(gè)回調(diào)中繼續(xù)引用主對(duì)象呢
答案最簡(jiǎn)單的辦法就是將主對(duì)象的this保存到局部變量中,
</>復(fù)制代碼
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
}
}
};
}
};
如果我沒(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
摘要:參考一步一步搭建前端監(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)主要原因是,功能雖然...
摘要:的學(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),這樣...
摘要:于是乎同源策略應(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域下的資源是不被允許的,...
摘要:默認(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...
閱讀 2571·2023-04-26 00:57
閱讀 934·2021-11-25 09:43
閱讀 2235·2021-11-11 16:55
閱讀 2271·2019-08-30 15:53
閱讀 3613·2019-08-30 15:52
閱讀 1484·2019-08-30 14:10
閱讀 3398·2019-08-30 13:22
閱讀 1228·2019-08-29 11:18