我从javascript对象内部进行了一些Ajax调用。
myObject.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.foo。我如何在XMLHttpRequest事件中保留对主对象的引用?
最简单的方法通常是将的值存储在this局部变量中:
this
myObject.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标识符确实是构造函数(您正在分配prototype属性)。
myObject
prototype
如果是这种情况,请不要忘记添加正确的constructor属性(因为您正在替换整个属性prototype),这只是对构造函数的引用。
constructor
也许是这个问题的主题,但建议阅读: