隐藏Chrome控制台中的__proto__属性

时间:2012-08-05 16:29:40

标签: javascript debugging google-chrome console

每当我在一个对象上键入console.log/console.dir时,其中一个始终显示的属性是__proto__,它是构造函数。

有什么方法可以隐藏这个吗?

6 个答案:

答案 0 :(得分:7)

重新定义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 __。

的原始对象

答案 1 :(得分:3)

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);

答案 2 :(得分:0)

使用Opera和Dragonfly。在其设置(脚本选项卡)中,您可以取消选中“显示原型”选项。

答案 3 :(得分:0)

虽然.__proto__很重要,但显然有一种方法可以隐藏控制台中的内容。当您尝试执行此操作时,会演示此内容:

 for (var i in function.prototype) {
    console.log(i+": "+function.prototype[i].toString())
    }

有一些东西没有记录到控制台,我认为这正是整个主题的内容(IMO答案应该允许所有原型,所以任何访问这个主题的人都可以使用它。)

另外:__proto__不是构造函数。它是对象的最高优先级原型对象。重要的是你不要删除原型而不管它,因为如果有一个JavaScript依赖的方法,那么整个事情都会变得糟透了。对于构造函数来看obj.constructor,它并没有搞砸整个该死的东西,它可能只是它的命名,构造函数,想象一下。

答案 4 :(得分:0)

这是布莱恩和阿卜杜拉的答案的组合:

var old_log = console.log;
console.log = function (arg)
{
    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;
    }
    old_log(clearProto(arg));
};

var mixed = [1, [2, 3, 4], {'a': [5, {'b': 6, c: {'d': '7'}}]}, [null], null, NaN, Infinity];
console.log(mixed);

答案 5 :(得分:-1)

使用Object.create(null)创建没有__proto__

的对象

如果您只想隐藏在控制台中显示.__proto__对象的原型,则不能。虽然我不明白你为什么要这样做。

顺便说一下,.__proto__不是对象的构造函数,而是[[Prototype]] link