摘要:附,在设计模式看到的译者注译者注定义一个构造函数时,其默认的对象是一个类型的实例,其属性会被自动设置为该构造函数本身。
问题
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 值。
*/
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85486.html
摘要:参考一步一步搭建前端监控系统错误监控篇用插件记录网络请求异常关于专注于微信小程序微信小游戏支付宝小程序和线上应用实时监控。 摘要: 如何监控HTTP请求错误? 作者:一步一个脚印一个坑 原文:搭建前端监控系统(四)接口请求异常监控篇 Fundebug经授权转载,版权归原作者所有。 背景:市面上的监控系统有很多,大多收费,对于小型前端项目来说,必然是痛点。另一点主要原因是,功能虽然...
摘要:于是乎同源策略应运而生主要限制在于和无法读取。怎么绕过同源策略首先一般来说协议和端口造成的跨域问题大部分方法是没有办法绕过的。二级域名是寄存在主域名之下的域名。当主域名受到惩罚二级域名也会连带惩罚。 前言 这是一道前端跨不过躲不掉面试必备的知识,挣扎多年没能做到刻骨铭心深入脊髓,只能好好写篇博文记录起来了; 什么是跨域? 广义来说,A域执行的文档脚本试图去请求B域下的资源是不被允许的,...
摘要:默认参数为空字符串密码,可选参数,用于授权。默认参数为空字符串备注如果不是有效的方法或地址不能被成功解析,将会抛出异常如果请求方法不区分大小写为或将会抛出异常重写由服务器返回的类型。 本文详细介绍了 XMLHttpRequest 相关知识,涉及内容: AJAX、XMLHTTP、XMLHttpRequest详解、XMLHttpRequest Level 1、Level 2 详解 XHR...
阅读 2519·2023-04-26 00:57
阅读 879·2021-11-25 09:43
阅读 2182·2021-11-11 16:55
阅读 2158·2019-08-30 15:53
阅读 3569·2019-08-30 15:52
阅读 1416·2019-08-30 14:10
阅读 3321·2019-08-30 13:22
阅读 1189·2019-08-29 11:18