我有一个对象,就像这样
var Egg = function(){
this.test = $(.slider .label);
$('.slider').slider({
min: 1,
value: 2,
step: 1,
value: 10,
slide: function(){
this.test.html(ui.value)
}
});
}
我想在滑块对象中使用我的变量测试。但是,当前形式this
指的是滑块而不是我的egg对象,因此当滑块移动时尝试使用this.test会导致未定义。
如何让this
引用我的对象而不是滑块。
由于
答案 0 :(得分:2)
这有动态范围,因此在slide函数中,这是指任何称为该函数的对象。这不等于函数定义时的等价(我不知道我是否非常清楚地说明了......读这个http://hoolihan.net/blog-tim/2009/02/17/static-vs-dynamic-scope/)。但是,您可以将其保存在另一个变量中并以此方式访问
var Egg = function(){
var self = this;
this.test = $(.slider .label);
$('.slider').slider({
min: 1,
value: 2,
step: 1,
value: 10,
slide: function(){
self.test.html(ui.value)
}
});
}
答案 1 :(得分:1)
这是jQuery吗?使用$.proxy
...
$('.slider').slider({
min: 1,
value: 2,
step: 1,
value: 10,
slide: $.proxy(function(){
this.test.html(ui.value)
}, this)
});
如果没有jQuery,您可以使用Function.prototype.bind
...
$('.slider').slider({
min: 1,
value: 2,
step: 1,
value: 10,
slide: function(){
this.test.html(ui.value)
}.bind(this)
});
Function.prototype.bind