1

有什么方法可以监控 NodeJS 中的原始字符串声明吗?例如,当我这样做时,"test";是否有任何方法可以触发特殊事件"test"作为参数?

4

2 回答 2

2

我不确定您所说的“测试”是什么意思;; 但是,如果您想在为变量分配新值时触发事件,不,没有办法为变量更改触发事件。

如果你想观察一个变量,最好重新设计你的系统来进行调用,而不是分配一个变量。而不是这样做:

running_mode = "test";

要求

switch_mode("test");

并调用您想在此更新上触发的任何事件处理程序。

如果你真的想观察一个全局变量的值,你可以通过在主循环的每一轮检查一次值来做到这一点:

function is_mode_changed() {
   if (running_mode=="test") event_handler();
   process.nextTick(is_mode_changed);
}

一旦调用此函数,它将在主循环的每一轮中继续运行一次。如果你想做的是像跟随一个变量不时地做一些特定的任务,比如跟随一个全局计数器并在每次计数器达到 1000 时执行一些清理任务,这是一个很好的方法。如果你想在变量改变后立即做某事,那是不可能的。

我希望我能正确理解你的问题。

更新

[我在下面的评论中添加了这一点,因为我误解了它,所以上面的所有内容都与问题无关。]

正如您自己提到的那样,字符串文字就像"test"是一个原始值,它不是一个对象。因此,它由解释器以我们无法更改的方式处理。

来自 Ecma-262:

4.3.2 原始值

第 8 条中定义的类型Undefined, Null, Boolean,Number或之一的成员String

注意:原始值是直接在语言实现的最低级别表示的数据。

为防止混淆,第 8 条是上面列出的类型标准部分。

于 2012-07-02T01:33:17.713 回答
1

Since you specified V8, and not per-spec-ECMAScript, you have more concrete options at your disposal. In the V8 API there is classes/templates or primitives that are separate from those of object wrappers for primitives. In order to be able to hook in a way to know when this actually happens would likely require modifying v8 in a custom manner, but it is doable.

http://code.google.com/p/v8/source/browse/branches/bleeding_edge/include/v8.h#1017

Also much of the action takes place in js itself. Perhaps not the very constructor itself, but everything that happens thereafter. String.prototype.toString/valueOf.

http://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/string.js

于 2012-07-04T06:33:20.103 回答