首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跟踪当前行号

问跟踪当前行号
EN

Stack Overflow用户
提问于 2015-11-25 07:38:39
回答 1查看 191关注 0票数 0

我正在使用eval运行一些代码,这些代码将更改名为$scope的variables对象。

这是我的观察者:

代码语言:javascript
复制
$scope.$watch(function () {
  return $scope.variables;
}, function (variables) {
  console.log('changed!');
}, true);

下面是我正在运行的代码(这只是示例代码;它可能是任何我无法预料的任意代码):

代码语言:javascript
复制
eval('$scope.variables.foo = "bar";\n$scope.variables.bar = "foo";');

在这个例子中,观察者会被触发两次,并给出新的值。到目前一切尚好。缺少的信息是,第一个触发器是由eval调用中的第一行引起的,而第二个触发器是由第二行引起的(注意\n调用中的\n表示一个新行号)。

是否有一种使用角度或普通JavaScript实现这一目标的方法?我已经研究过像https://github.com/stacktracejs/stacktrace.js这样的工具,但它们似乎不起作用。

为了明确起见,我是而不是,寻找抛出错误时的行号。当激活观察者的回调时,我需要跟踪eval语句当前在哪一行,这样我就可以将该行号与对我正在观察的对象所做的更改相关联。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-25 08:58:15

可以将输入字符串拆分为\n,并插入新语句,跟踪行号。

​

代码语言:javascript
复制
var s = '$scope.variables.foo = "bar";\n$scope.variables.bar = "foo";\n'
var arr = s.split(/\n/);
var out = [];
for (var i = 0; i < arr.length; i++) {
  out.push("console.log('current line: " + i + "');");
  out.push(arr[i]);
}
out = out.join('\n');
console.log(out);
document.write('<pre>' + out + '</pre>');

​

你可以用你想要的东西代替console.log(),调用另一个函数,一个调试调用.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33910882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档