Javascript原型继承原型函数调用

时间:2012-07-20 17:32:12

标签: javascript prototypal-inheritance

有关于在另一个原型函数中调用一个原型函数的问题。

例如,假设我有一个带有两个原型函数的基本滑块。

function Slider() {

}

Slider.prototype.transition = function() {

}

Slider.prototype.setTargets = function() {

}

在转换函数中调用setTargets函数的正确方法是什么,如下所示:

Slider.prototype.transition = function() {
   this.target.fadeOut('normal', function() {
      // call setTargets?  
      this.setTargets(); // errors when i do this
   });
}

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

如果this.target是jQuery对象,则fadeOut的回调将以this作为DOMNode进行调用。

请改为:

Slider.prototype.transition = function() {
   var me = this;
   this.target.fadeOut('normal', function() {
      me.setTargets(); // <-- See me
   });
}

我为that的所有初始化引用选择了名称 me this。我从未使用 that me代替DomNodes,等等。对我来说。

关于这一点,请参阅有关未来观点的评论。

修改

Acually我用me而不是that - 不知道我在想什么? !


评论:

Slider.prototype.transition = function() {
   var me = this;
   this.target.fadeOut('normal', function() {
      var domThis = this;
      me.setTargets(); // <-- See me
      setTimeout(function() {
          // Use domThis [Dom Node]
      }, 123);
   });
}

或者:

您可以创建一个jQuery对象:

      var $this = $(this);
      me.setTargets(); // <-- See me
      setTimeout(function() {
          // Use $this [jQuery Object]
      }, 123);

如果你需要这个jQuery对象,你可以参考:me.target

      me.setTargets(); // <-- See me
      setTimeout(function() {
          // Use me.target [jQuery Object]
      }, 123);

答案 1 :(得分:0)

fadeOut函数不会在slider对象的上下文中调用。

Slider.prototype.transition = function() {
    var slider = this;
    this.target.fadeOut('normal', function() {
        // call setTargets?  
        slider.setTargets(); // should work now.
    });
}