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では、卵オブジェクトではなくスライダーを参照しているため、スライダーが移動するときに this.test を使用しようとすると、未定義になります。

thisスライダーではなくオブジェクトを参照するにはどうすればよいですか。

ありがとう

4

2 に答える 2

2

これには動的スコープがあるため、スライド関数内では、その関数を呼び出したオブジェクトを参照しています。これは、関数が定義されたときと同じではありません(私がそれを非常に明確に言っているかどうかはわかりません...これを読んでください 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)
       }
    });

}
于 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)
});
  • MDN ドキュメントと互換性シムFunction.prototype.bind
于 2012-08-03T21:04:18.353 に答える