【发布时间】:2017-01-30 23:46:55
【问题描述】:
为了便于阅读,我删除了一些内容。
我使用 CoffeeScript 类系统编写了用户服务,但是当它尝试访问自己的成员函数时给我带来了问题。
User = (...) ->
'ngInject'
new class User
constructor: ->
@setRole()
login: (params) ->
params.grant_type = 'password'
request = {...}
$http(request).then (response) ->
$window.localStorage.token = response.data.access_token
payload = jwtHelper.decodeToken(response.data.access_token)
$rootScope.$broadcast EVENTS.AUTH.LOGIN
@setRole() # PROBLEM LINE
, (response) ->
if response.status == 400
$rootScope.$broadcast EVENTS.ERROR.BAD_REQUEST
...
当我尝试调用 @setRole() 时,浏览器通知我 setRole() 不存在:
TypeError: 无法读取未定义的属性“setRole”
编译成这样:
User = [..., function(...) {
'ngInject';
return new (User = (function() {
function User() {
this.setRole();
console.log("User service loaded");
}
User.prototype.login = function(params) {
var request;
params.grant_type = 'password';
request = {...}
};
return $http(request).then(function(response) {
var payload;
$window.localStorage.token = response.data.access_token;
payload = jwtHelper.decodeToken(response.data.access_token);
$rootScope.$broadcast(EVENTS.AUTH.LOGIN);
return this.setRole(); # WRONG this, I PRESUME
}, function(response) {
if (response.status === 400) {
return $rootScope.$broadcast(EVENTS.ERROR.BAD_REQUEST);
}
});
};
...
我的问题是:为什么我不能使用@ 表示法在我自己的服务中调用 User.setRole() ?有解决方法吗?我认为这与与用户实例不对应的 this 指针有关。
【问题讨论】:
标签: javascript angularjs coffeescript