JavaScript改变了对此的所有权

时间:2012-08-03 20:48:47

标签: javascript oop this

我有一个对象,就像这样

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

由于

2 个答案:

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