监视原始字符串声明

时间:2012-06-13 13:29:44

标签: javascript string node.js primitive

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

2 个答案:

答案 0 :(得分: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条中定义的UndefinedNullBooleanNumberString类别之一的成员

     

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

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

答案 1 :(得分:1)

由于您指定了V8而不是per-spec-ECMAScript,因此您可以使用更多具体选项。在V8 API中,有类/模板或基元与基元的对象包装器分开。为了能够知道何时实际发生可能需要以自定义方式修改v8,但它是可行的。

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

此外,大部分动作都发生在js本身。也许不是构造函数本身,而是之后发生的一切。 String.prototype.toString /的valueOf。

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