我有两个类和一个全局函数。在全局函数中,我想确定哪个类调用它。这是CofffeeScript中代码的样子
window.pet = ()->
alert "I was called #{by}"
class Cat
constructor: (@name) ->
pet()
class Dog
constructor: (@name) ->
pet()
这可能吗?
答案 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()