好的,使用Angular和Coffeescript,以下作品:
angular.module 'someApp'
.factory 'someFactory', ($timeout) -> new class SomeClass
constructor: ->
@humans = 1
findHuman: ->
$timeout((=>@humans+=1), 1000)
我觉得这很好,但我想在其他地方拥有@ humans + = 1部分。
那为什么这不起作用?
angular.module 'someApp'
.factory 'someFactory', ($timeout) -> new class SomeClass
constructor: ->
@humans = 1
findHuman: ->
$timeout(addOneHuman, 1000)
addOneHuman = =>
@humans+=1
使用console.log或$ log进行测试,在这里和那里添加@,>而不是=>有时变量人类是NaN,有时它是未定义的。
我需要做些什么来完成这项工作? :)
答案 0 :(得分:0)
我不太了解Angular方面的情况,但我认为你的问题是:
addOneHuman = =>
没有做你认为的事情。像这样:
class C
f = ->
m: ->
在f
中创建C
本质上是私有函数。 JavaScript版本等同于:
var C = (function() {
function C() {}
var f = function() {};
C.prototype.m = function() {};
return C;
})();
所以f
只是一个引用函数的变量,而f
是C
中任何内容的范围。将其更改为:
f = =>
没有做任何事情,因为在定义this
时没有适用f
。另一方面,m
是一种方法(请注意JavaScript版本中的C.prototype.m
),因此适用的this
和m: =>
可以做一些有用的事情。
您只希望addOneHuman
成为方法而不是普通的旧功能:
addOneHuman: =>
# ---------^
在我的其他几个答案中,你可能会有一些有用的东西: