获取传递给函数的文字的Javascript'type'

时间:2018-08-16 03:36:27

标签: javascript reflection

给出以下代码:

var testLiteral = {
  logMe: function() {
    logger(this, 'logMe message');
  }
}
console.log(Object.keys({ testLiteral })[0]);
logger(testLiteral, 'mainline message');
testLiteral.logMe();

function logger(caller, message) {
  console.log(Object.keys({ caller })[0] + ': ' + message);
}

我们得到以下结果:

  • “ testLiteral”
  • “呼叫者:主线消息”
  • “呼叫者:logMe消息”

有什么办法可以对所传递的文字进行自省以查看原始的“对象”名称,即testLiteral?我想要的结果是:

  • “ testLiteral”
  • “ testLiteral:主线消息”
  • “ testLiteral:logMe消息”

注意:typeofobject.constructor.name不能用文字来解决问题,它们只返回objectObject

2 个答案:

答案 0 :(得分:1)

var testLiteral = {
  logMe: function() {
    logger(this, 'logMe message');
  }

}
console.log(Object.keys({ testLiteral })[0]);
logger(testLiteral, 'mainline message');
testLiteral.logMe();

function logger(testLiteral, message) {
  console.log(Object.keys({testLiteral})[0] + ': ' + message);
}

答案 1 :(得分:1)

您可以先包装对象,然后再将其传递给logger函数。对于testLiteral.logMe();,它将记录logMe,因为this函数中的logMe将指向自身。

var testLiteral = {
  logMe: function() {
    logger(this, 'logMe message');
  }
}
console.log(Object.keys({ testLiteral })[0]);
logger({ testLiteral }, 'mainline message');
testLiteral.logMe();

function logger(caller, message) {
  console.log(Object.keys(caller)[0] + ': ' + message);
}