2013-07-18 27 views
1

有什么办法让Chrome DevTools不能通过引用记录对象?问题的下面是一个例子:防止Chrome DevTools通过引用记录对象

var monkey = { 'bananas': 0 }; 
console.log("Monkey Log #1: %O", monkey); 
monkey.bananas++; 
console.log("Monkey Log #2: %O", monkey); 
monkey.bananas++; 
console.log("Monkey Log #3: %O", monkey); 

如果你看一下工具日志的开发,你会看到每个日志项的值是相同的 - 他们都有3根香蕉,而不是预期的0/1/2香蕉。

+0

登录对象 – SLaks

+0

的深层副本我想你可能是对某事。 :)我会充实的答案.. – Anthony

回答

2

只需登录它直接,无需使用%O

var monkey = { 'bananas': 0 }; 
console.log("Monkey Log #1: ", monkey); 
monkey.bananas++; 
console.log("Monkey Log #2: ", monkey); 
monkey.bananas++; 
console.log("Monkey Log #3: ", monkey); 

日志为:

loggy

+0

Aaah,我不知道你可以做额外的参数,而不需要通过%o /%i /%s标签来引用它们。甚至比我的回答更好 - 谢谢! – Anthony

0

你可能只需要做一个JSON.stringify(object),并将它看作一个字符串即可。其他变量,如整数,你需要做一个.toString()。

0

SLaks引发了正确答案:

创建复制的对象的包装功能。

function uniqueObj(obj) { 
    return jQuery.extend(true, {}, obj); 
} 

var monkey = { 'bananas': 0 }; 
console.log("Monkey Log #1: %O", uniqueObj(monkey)); 
monkey.bananas++; 
console.log("Monkey Log #2: %O", uniqueObj(monkey)); 
monkey.bananas++; 
console.log("Monkey Log #3: %O", uniqueObj(monkey));