0

我有一个对象,像这样

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引用我的对象而不是滑块。

谢谢

4

2 回答 2

2

this 具有动态范围,因此在 slide 函数内部 this 指的是调用该函数的任何对象。这不等于定义函数时所等于的值(我不知道我是否说得很清楚……阅读此http://hoolihan.net/blog-tim/2009/02/17/static- vs-动态范围/)。但是,您可以将其保存在另一个变量中并以这种方式访问​​它

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)
       }
    });

}
于 2012-08-03T20:50:13.227 回答
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)
});
于 2012-08-03T21:04:18.353 回答