在Chrome中隐藏__proto__属性's控制台
hiding the __proto__ property in Chrome's console
每当我在对象上键入console.log/console.dir
时,总是显示的属性之一是__proto__
,它是构造函数。
有什么办法可以隐藏这件事吗?
重新定义console.log:
console.log = function (arg) {
var tempObj;
if (typeof arg === 'object' && !arg.length) {
tempObj = JSON.parse(JSON.stringify(arg));
tempObj.__proto__ = null;
return tempObj;
}
return arg;
};
这不会修改肯定需要__proto__的原始对象。
console.debug = function() {
function clear(o) {
var obj = JSON.parse(JSON.stringify(o));
// [!] clone
if (obj && typeof obj === 'object') {
obj.__proto__ = null;
// clear
for (var j in obj) {
obj[j] = clear(obj[j]); // recursive
}
}
return obj;
}
for (var i = 0, args = Array.prototype.slice.call(arguments, 0); i < args.length; i++) {
args[i] = clear(args[i]);
}
console.log.apply(console, args);
};
var mixed = [1, [2, 3, 4], {'a': [5, {'b': 6, c: '7'}]}, [null], null, NaN, Infinity];
console.debug(mixed);
使用Opera和Dragonfly。在其设置(脚本选项卡)中,您可以取消选中"显示原型"选项。
使用Object.create(null)
创建不带__proto__
的对象
如果您只想隐藏控制台中具有.__proto__
的对象上显示的proto,则不能。虽然我不明白你为什么要。
顺便说一句,.__proto__
不是对象的构造函数,而是它的[[Prototype]]链接。
尽管.__proto__
很重要,但显然有一种方法可以隐藏控制台中的内容。当你尝试这样做时,就会证明这一点:
for (var i in function.prototype) {
console.log(i+": "+function.prototype[i].toString())
}
会有一些东西没有记录到控制台上,我认为这正是整个主题的内容(IMO的答案应该允许所有原型,这样任何访问该主题的人都可以使用它)。
另外:__proto__
不是构造函数。它是对象的最高优先级原型对象。重要的是,不要删除proto并将其单独处理,因为如果存在JavaScript所依赖的方法,那么整个事情就会变得一团糟。对于obj.constructor
的构造函数来说,它并没有破坏整个该死的东西,它可能只是它的名字,构造函数,想象一下。
隐藏__proto__
不值得(请参阅以下原因)
var old_log = console.log;
console.log = function ()
{
function clearProto(obj)
{
if (obj && typeof(obj) === "object")
{
var temp = JSON.parse(JSON.stringify(obj));
temp.__proto__ = null;
for (var prop in temp)
temp[prop] = clearProto(temp[prop]);
return temp;
}
return obj;
}
for (var i = 0; i < arguments.length; ++i)
arguments[i] = clearProto(arguments[i]);
old_log.apply(console, arguments);
}
var mixed = [1, [2, 3, 4], {'a': [5, {'b': 6, c: {'d': '7'}}]}, [null], null, NaN, Infinity];
console.log([1, 2, 3], mixed);
old_log([1, 2, 3], mixed); // 4 comparison (original mixed has __proto__)
NaN
和Infinity
不能用JSON进行克隆。在Chrome中,您还可以在开发工具的右侧获得行号。通过覆盖console.log
,您将失去它。不值得把__proto__
藏在那上面!
- 控制台返回var不是't定义,但它是
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 如何使用Protractor从Chrome控制台获取所有日志
- 为什么我能够从javascript控制台发送跨域ajax请求
- 当浏览器控制台未打开时,为什么要求会导致Internet Explorer 9超时
- 在量角器中创建一个.txt错误输出文件是手动的,而不是控制台错误
- 按压“;输入“;将值打印到控制台日志
- 如何让JS脚本在导航后继续运行(谷歌chrome控制台)
- 将数组的拼接分配给自身时,Javascript控制台打印不起作用
- PHP REST服务抛出异常——希望避免控制台错误
- js文件未加载js控制台say's”;不允许加载本地资源”;
- 如何在java中获得浏览器的java脚本控制台输出
- "资源不足错误“;当从Chrome控制台重复发出ajax请求时
- 如何使Visual Studio自动清除Javascript控制台
- Web控制台命令不起作用
- 只有当Javascript控制台在chrome上打开时,Javascript才能工作
- jQuery控制台错误:无法读取属性'top'的未定义
- 打印javascript控制台的堆栈跟踪
- 如何在调试模式停止后查看Visual Studio 2015 Javascript控制台
- 为什么控制台没有't使用输入的对象's的`toString`方法