给出以下代码:
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
?我想要的结果是:
注意:typeof
和object.constructor.name
不能用文字来解决问题,它们只返回object
和Object
。
答案 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);
}