在NodeJS中是否有监控原始字符串声明的方法?
例如,当我"test";
时,是否有任何方法可以触发"test"
作为参数的特殊事件?
答案 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条中定义的
Undefined
,Null
,Boolean
,Number
或String
类别之一的成员注意:原始值是直接在语言实现的最低级别表示的数据。
为防止混淆,第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