在CoffeeScript中查找调用函数调用的类

时间:2013-06-02 13:44:10

标签: javascript class coffeescript

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

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

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

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

这可能吗?

2 个答案:

答案 0 :(得分: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 is not standard,所以你可能也不应该使用它。但您可以通过访问其constructor属性安全地访问宠物的“类”(即其构造函数),如示例所示。

答案 1 :(得分:-1)

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()