&引用;这";(对象)在使用$timeout调用angularjs函数时未定义

&引用;这";(对象)在使用$timeout调用angularjs函数时未定义,angularjs,service,this,Angularjs,Service,This,我有一个角度服务来管理我的屏幕警报: angular.module('theapp') .factory('Alerts', function ($timeout) { var unsetMsg = null; return { alertType: null, alertTitle: null, alertMessage: null, setMessage: function(type, title, message, timed) {

我有一个角度服务来管理我的屏幕警报:

angular.module('theapp')
.factory('Alerts', function ($timeout) {

  var unsetMsg = null;

  return {

    alertType: null,
    alertTitle: null,
    alertMessage: null,

    setMessage: function(type, title, message, timed) {     
        var self = this;
        $timeout.cancel(unsetMsg);
        self.alertType = type;
        self.alertTitle = title;
        self.alertMessage = message;

        if (timed)
        {
            unsetMsg = $timeout(self.unsetMessage,5000);
        }
    },

    unsetMessage: function() {
        this.alertType = null;
        this.alertTitle = null;
        this.alertMessage = null;   
        $timeout.cancel(unsetMsg);
    }
  }
  });

设置消息工作正常(从角度控制器调用)并将超时变量设置为OK,但当在超时内调用的函数(未设置消息)在5秒延迟后运行时,代码抛出错误
这是未定义的
。为什么它不承认自己是一个对象,我如何实现我要做的事情?

一种可能是在回调中使用捕获的
self
和它,以便传递正确的上下文:

if (timed) {
    unsetMsg = $timeout(function() {
        self.unsetMessage.apply(self);
    }, 5000);
}