1

我有两个类和一个全局函数。在全局函数中,我想确定哪个类调用了它。这是代码在 CoffeeScript 中的样子

window.pet = ()->
  alert "I was called #{by}"

class Cat
  constructor: (@name) ->
    pet()

class Dog
  constructor: (@name) ->
    pet()

这可能吗?

4

2 回答 2

2

简短的回答:不要。

这个问题可能会因为重复而关闭。但我想指出,如果您需要使用这种技巧来解决问题,您可能会通过使用类似的技巧来引入另一个问题。如果函数的行为需要依赖于某些东西(比如从哪里调用它),请将其明确并为该依赖项使用参数;这是一个每个人都会很容易理解的模式。

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"

话虽这么说,这Function#name不是标准的,所以你可能也不应该使用它。但是您可以通过访问宠物的属性来安全地访问宠物的“类”(即它的构造函数),constructor如示例中所示。

于 2013-06-02T21:30:24.520 回答
0

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()
于 2013-06-04T17:57:00.760 回答