“未修饰”的表达方式result
将引用名为的全局变量result
,你没有。
仅仅因为参考了result
文本上位于对象内部,引用引用该对象的属性。在其他语言中可能是这样,但在 JavaScript 中则不然。
您的问题的解决方案位于该问题的评论之一中。使用this.
作为前缀在这些情况下起作用。试试这个代码:
var x = 1;
var p = {
x: 2,
f: function () {alert(x); alert(this.x);}
}
p.f();
在这里您将看到 1 个警报,然后是 2 个。
回答更新的问题
你这里遇到的是一个经典问题。你写
var xml = Xml.init(from, to, fromurl);
console.log(xml.getResult()); //<---- calling getResult();
第一行最终触发 Ajax 请求。一旦该请求被触发,您立即转到第二行,在那里您可以调用xml.getResult()
。接到电话的可能性接近 100%getResult
将会发生before您的 Ajax 调用能够填写以下值result
.
一种方法是传递你想要的东西do结果为init
方法。在这种情况下,您似乎想要记录结果,因此请尝试
var xml = Xml.init(from, to, fromurl, function () {console.log(xml.getResult()});
这里我们有一个新的第四个参数Xml.init
所以我们必须通过更新来处理这个问题Xml
对象,像这样(未经测试):
.
.
.
init: function (fromaddress, toaddress, link, callback) {
from = fromaddress;
to = toaddress;
url = link;
this.requestXml(callback);
return this;
},
requestXml: function (callback) {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: callback
});
},
.
.
.
换句话说,当您要进行异步调用时,请立即使用结果。不要把它们留到以后使用,因为你永远不知道它们什么时候会“准备好”。