代码之家  ›  专栏  ›  技术社区  ›  Will

setTimeout的javascript对象方法名

  •  1
  • Will  · 技术社区  · 15 年前

    我的对象有一个我想反复调用的函数。 我的问题是如何使用setTimeout指向该对象实例的方法?

    MyObject.prototype.Play = function() {
    
      // do some stuff
      setTimeout(thecurrentmethodnameHERE, 1000);
    }
    
    var test = new MyObject();
    
    test.Play();
    
    2 回复  |  直到 14 年前
        1
  •  7
  •   nlogax    15 年前

    只要做 setTimeout(this.someMethod, 1000) 但请记住,它将在全局上下文中调用,因此 this 里面 someMethod window ,假设是Web浏览器。

    如果这是一个问题,您可以在构造函数中这样做:

    YourObject = function(name) {
      var self = this;
      self.name = name;
      self.someMethod = function() {
        alert(self.name); // this.name would have been window.name
      };
      setTimeout(self.someMethod, 1000);
    };
    

    一些库定义 Function.prototype.bind 在这种情况下可以使用, setTimeout(this.someMethod.bind(this), 1000) ,它只返回一个新函数, call() 用你想要的对象作为 ,这是一个好的、简单的函数,可以在不干扰 Function 原型也。

        2
  •  0
  •   quano    14 年前
    Function.prototype.bind = function(scope) {
      var _function = this;
    
      return function() {
        return _function.apply(scope, arguments);
      }
    }
    
    MyObject.prototype.Play = function() {
    
      // do some stuff
      setTimeout(thecurrentmethodnameHERE.bind(this), 1000);
    }