Javascript 查找在CoffeeScript中调用函数调用的类
我有两个类和一个全局函数。在全局函数中,我想确定哪个类调用它。下面是coffeescript中的代码Javascript 查找在CoffeeScript中调用函数调用的类,javascript,class,coffeescript,Javascript,Class,Coffeescript,我有两个类和一个全局函数。在全局函数中,我想确定哪个类调用它。下面是coffeescript中的代码 window.pet = ()-> alert "I was called #{by}" class Cat constructor: (@name) -> pet() class Dog constructor: (@name) -> pet() 这可能吗?简短的回答:不要 这个问题很可能是重复的。但我想指出的是,如果你需要用这种技巧来解决一
window.pet = ()->
alert "I was called #{by}"
class Cat
constructor: (@name) ->
pet()
class Dog
constructor: (@name) ->
pet()
这可能吗?简短的回答:不要
这个问题很可能是重复的。但我想指出的是,如果你需要用这种技巧来解决一个问题,你可能会用这样的技巧来引入另一个问题。如果一个函数的行为需要依赖于某个东西(比如从哪里调用它),那么将其显式化,并为该依赖关系使用一个参数;这是每个人都很容易理解的模式
pet = (pet) ->
alert "I was called by #{pet.name} the #{pet.constructor.name}"
class Cat
constructor: (@name) ->
pet @
new Cat 'Felix' # Output: "I was called by Felix the Cat"
话虽如此,你也不应该用这个。但是您可以通过访问宠物的
构造函数
属性来安全地访问宠物的“类”(即其构造函数函数),如示例所示。arguments.callee.caller.name就是您要查找的。下面的示例应该可以做到这一点
pet = ->
callerName = arguments.callee.caller.name
console.log "called by #{callerName}"
class Cat
constructor: (@name) ->
pet()
class Dog
constructor: (@name) ->
pet()
c = new Cat()
d = new Dog()
@user1737909简短回答:是,函数可能重复。toString甚至不是标准配置。旧的SpiderMonkey甚至没有。@yckart:这里不需要它,因为CoffeeScript构造函数是命名函数,并且(非标准的)
.name
属性在这里有效。但是请注意,在使用严格模式时,参数。被调用方
。