在另一个闭包内的setTimeout内部无法识别数据

时间:2017-08-17 02:43:19

标签: javascript initialization vuejs2 settimeout jquery-form-validator

我有我的数据,我试图在setTimeout内的初始化程序中访问它。

 data() {
    return { val: {} }
 },

 methods: {
    test() { 
         console.log(this.val) // works 

         var self = this

         setTimeout(function() {
              console.log(this.val) // works                 
              var check = this.myMethod()

              $.validate({
                   onError: function($form) {
                        console.log(self.val) // doesn't work       
                   }
              })

         }, 500)
    },

    myMethod() {
       // some stuff
       return true
    }
 }

这是更新后的代码。使用var self = this方法,我现在得到了:

  

未捕获的TypeError:this.myMethod不是函数

2 个答案:

答案 0 :(得分:1)

data() {
    return { val: {} }
 },

 methods: {
    test() { 
         console.log(this.val) // works
         var self = this;
         setTimeout(function() {
              console.log(self.val) // works                 

              $.validate({
                   onError: function($form) {
                        console.log(self.val) // doesn't work       
                   }
              })

         }, 500)
    }
 }

试试这个。在函数中调用函数时,你经常会失去这个值,所以我们将它存储在一个变量中,以便从嵌套函数中访问它。

答案 1 :(得分:-2)

 methods: {
    test() { 
        console.log(this.val) // works
        // for this -> self trick
        let self = this;
        setTimeout(function() {
              console.log(self.val) // works                 

              $.validate({
                   onError: function($form) {
                        console.log(self.val) // doesn't work       
                   }
              })

         }, 500)
    }
}