所以我有这个Javascript对象:
var obj = {
conn : null,
first : function(thisIdentity) {
"use strict";
$(document).on('click', thisIdentity, function(e) {
e.preventDefault();
$.ajax ({
url : some value,
// other parameters
success : function() {
this.conn = new Connection(data.user_id, "127.0.0.1:80");
}
});
},
second : function(thisIdentity) {
"use strict";
$(document).on('click', thisIdentity, function(e) {
e.preventDefault();
$.ajax ({
url : some value,
// other parameters
success : function() {
// using this.conn now results in UNDEFINED
}
});
}
};
现在,在第一个函数的AJAX调用中,基本上将值赋给conn变量,但是当我尝试在第二个函数中使用相同的值时,它会声明 this.conn未定义。我只是想知道如何为对象的属性赋值并保留它以备将来使用?谢谢!
答案 0 :(得分:1)
在ajax成功回调中, IocContainer.ShowWeatherViewModel
指的是与原始对象不同的范围。
将您的代码更改为:
if(x<button.getOriginX()-button.getWidth()*0.5f||x>(button.getOriginX()+button.getWidth()*0.5f)||y<button.getOriginY() - button.getHeight()*0.5f||y>(button.getOriginY()+button.getHeight()*0.5f)){
//do stuff
}
答案 1 :(得分:0)
语法本身是错误的。您正在创建变量或在对象文字中给出表达式。请记住,这不是一个功能,而应该是:
$.ajax ({
// computation and in success function
conn: new Connection(data.user_id, "127.0.0.1:80")
});
<强>更新强>
当你提出这样的定义时:
success : function() {
this.conn = new Connection(data.user_id, "127.0.0.1:80");
}
此处,this
对象引用success
功能,而不是object
。阅读Understanding Scope and Context in JavaScript。现在,您需要为this
创建一个代理变量并使用它:
first : function(thisIdentity) {
"use strict";
var myObj = this;
$(document).on('click', thisIdentity, function(e) {
e.preventDefault();
$.ajax ({
url : some value,
// other parameters
success : function() {
myObj.conn = new Connection(data.user_id, "127.0.0.1:80");
}
});
},