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

Data is not recognised inside setTimeout inside another closure

我有我的数据,我正在尝试在 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 方法,我现在很兴奋:

Uncaught TypeError: this.myMethod is not a function

 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)
    }
}
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)
    }
 }

试试这个。在函数内调用函数时,您经常会丢失 this 的值,因此我们将 this 存储在一个变量中,以便可以从嵌套函数访问它。