在methods中一个方法调用另一个方法
settime(e){ //验证码倒计时
console.log('this is settime()')
},
getVerify:function(e){ //获取验证码
this.settime(e)
}
但当我们使用ajax请求时会报出以下错误
this.settime is not a function
代码如下:
settime(e){ //验证码倒计时
console.log('this is settime()')
},
getVerify:function(e){ //获取验证码
$.get(BACK_END_SERVER + "/sms/verify", { "phone":this.form1.phone }, function (data) {
this.settime(e)
})
},
这是因为this作用域指向问题,$get()函数实际是一个闭包,无法通过this来指定函数1
那么需要怎么修改呢?
我们通过当前对象赋予一个新的对象
var _this=this;
然后使用_this 来指定函数1就行了
完整代码
settime(e){ //验证码倒计时
console.log('this is settime()')
},
getVerify:function(e){ //获取验证码
var _this = this;
$.get(BACK_END_SERVER + "/sms/verify", { "phone":this.form1.phone }, function (data) {
_this.settime(e)
})
},
另外说一下,在es6 ,使用箭头函数是不存在这个问题的
例如:
setTimeout( () => {
console.log(this.type + ‘ says ‘ + say)
}, 1000)
当我们使用箭头函数时,函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,它的this是继承外面的,因此内部的this就是外层代码块的this。