【发布时间】:2012-12-18 21:39:49
【问题描述】:
我正在开发一个日志系统,并期待实现 log once 方法。
我遇到的问题是,如何检索唯一标识符和/或对象签名以用作哈希键?
我的想法是:
var Log = {
messages : {},
once : function(message)
{
// get unique id and/or passed objects signature, use it as a key
var key = unique( message );
if ( !Log.messages.hasOwnProperty(key) )
{
Log.messages[key] = message;
}
}
};
我试过.toString(),但它确实只返回[object Object] 用于基本对象,[object <type>] 用于其他任何东西。没有id,什么都没有。
我也尝试了toSource() 函数,但在 Chrome 中它不想使用基本对象。
不过,我需要的是让它适用于每种类型的对象。无论是字符串、整数、函数,我都需要得到那个签名/id。
也许已经在某个地方实现了这样的功能?
更新
这意味着在循环中进行日志记录,但不是每次迭代都记录,而是只记录一次以防止控制台污染。
我的特定循环实际上是一个游戏循环,我正在调试一些信息。
喜欢:
for (var i = 0; i < 100; i++)
{
console.log('message');
}
// this would log 100 entries
地点:
for (var i = 0; i < 100; i++)
{
Log.once('message');
}
// would execute behind the scenes console.log() only once.
【问题讨论】:
-
只是试图阻止函数多次执行还是我误读了?或者您是否试图阻止某个
message被多次记录?在这种情况下,message可以是从字符串到对象的任何东西?还是只是一个字符串? -
您可以将数字和字符串推送到数组中,但这不适用于
{} !== {}和(function foo(){}) !== (function foo(){})等对象/函数。 -
我想你会想看看 [JavaScript Object Id][1]。 [1]:stackoverflow.com/questions/2020670/javascript-object-id
-
在循环中
uniqueId没有帮助,因为每次我调用Log.once(),它都会创建一个new String实例,因此,增加id,并且再次登录。
标签: javascript