我的代码中没有几个函数,很难调试,例如,我需要一些帮助
fileName
当我查看控制台时(我经常使用chrome),我总是从第x行获得结果(x是我注销该值的行,在这种情况下为第1行),因此,
有什么办法找出物品的来源吗?结果将是类似
var p = item => {console.log(item)}
var f1 = () => {return p(1)}
var f2 = () => {return p(2)}
var f3 = () => {return p(3)}
编辑:
你们认为我可以操纵`result is ${item} and it is from function ${functionName}`
中的prototype
吗?
或者我可以对arguments
做些什么?
答案 0 :(得分:2)
除非告诉您,否则您无法真正知道呼叫者是谁。您可以附加一个参数并传递数据。
var p = (item, source) => console.log(`item: ${item}, source: ${source.name}`)
var f1 = () => {return p(1, f1)}
var f2 = () => {return p(2, f2)}
var f3 = () => {return p(3, f3)}
f1()
f2()
f3()
您的示例非常少,所以我不确定这是否是一个好选择,但是您可以合并对象来保持状态,然后知道调用对象的方法而不是调用者:
function someFn(item, name){
this.item = item
this.name = name
}
someFn.prototype.p = function(){
console.log(`item: ${this.item}, source: ${this.name}`)
}
var f1 = new someFn(12, "someName")
var f2 = new someFn(100, "someOtherName")
f1.p()
f2.p()
答案 1 :(得分:2)
概念:
您可以创建一个Error
对象,并使用其stack
提取函数名称(以regex为例)。这是概念:
let p = item => {
let err = new Error();
console.log(`result is ${item} and the callstack is ${err.stack}`);
};
let f1 = () => p(1);
let f2 = () => p(2);
let f3 = () => p(3);
f1();
f2();
f3();
p(5);
工作示例:
堆栈的第三行是调用函数p
的代码。您可以使用正则表达式提取名为p
的函数的名称。这是非常基本的正则表达式:
let p = item => {
let stackLines = new Error().stack.split("\n");
let callLocation = stackLines[2].match(/\s*at\s*(.+)/)[1];
console.log(`result is ${item} and it is from "${callLocation}"`);
};
let f1 = () => p(1);
let f2 = () => p(2);
let f3 = () => p(3);
f1();
f2();
f3();
p(5);
它还给出了函数的位置(脚本文件,行和列)。
答案 2 :(得分:2)
使用console.trace()而不是console.log()。