【发布时间】:2013-01-24 15:45:16
【问题描述】:
我有一个自定义的 Javascript 对象,如下所示:
var CustomClass = function(settings) {
this.var_1 = false;
this.var_2 = null;
this.var_3 = 0;
}
CustomClass.prototype.method_1 = function(){
var reader = new FileReader();
reader.onload = (function(cropWidget) {
this.var_1 = true;
});
}
CustomClass.prototype.method_2 = function(){
console.log(this.var_1); // logs 'false' onto the console
if(this.var_1)
{ // proceed further and do something
}
}
CustomObject 被实例化:
$(document).ready(function{;
var customObj = new CustomClass({/*json values*/});
});
然后,另一个 DOM 事件将调用 method_1,例如:
$('#element1').click(function(){
customObj.method_1(); // this is where var_1 is being set to true
});
问题发生了,当 method_2() 被另一个元素在 DOM 中调用时,像这样:
$('#element2').click(function(){
customObj.method_2();
});
它检查 var_1 的值,正如您所记得的那样,它在 customObj 调用 method_1 时已设置为 true
this.var_1 是假的,而不是应有的真。这是否意味着 var_1 的范围仅针对 method_1() 的范围设置为 true 并且仍然保留它的旧值? IMO Javascript 是通过引用传递的,因此变量值应该在其原始位置设置为 true。
有人可以解释我哪里出错了,以及如何设置 var_1 的值,以便它在 method_2 中也保留它的新值吗?
【问题讨论】:
-
每次点击
#element,都会生成一个新CustomClass对象。我的猜测是你在一个新对象上调用method_2,而不是同一个对象。 -
“另一个 DOM 事件” - 其他处理程序是否也创建了一个新实例?
-
向我们展示您实际调用
customObj.method_2()的代码 -
这些点击处理程序是否被绑定内部 相同
$(document).ready处理程序? -
@ParijatKalia:那么它应该可以工作,因为它对我有用:jsfiddle.net/bre7t
标签: javascript jquery pass-by-reference pass-by-value