javascript - 有没有办法显示所有新对象的属性?

标签 javascript object console.log

假设我有这段代码:

 x = "abcde";
 y = new String(x);

当我 console.log(y) 它只返回以下内容: 字符串 {0:“a”,1:“b”,2:“c”,3:“d”,4:“e”,长度:5,[[PrimitiveValue]]:“abcde”}

但我仍然可以说 y.charAt(0); 并且它会返回 "a" 那么这个 charAt 方法隐藏在哪里?我如何在 console.log 中看到它?

最佳答案

yString.prototype 获取 charAt,在许多浏览器中您会在控制台中看到它为 __proto__ .在控制台中,如果它在那里,您可以展开 __proto__ 以查看 String.prototype 属性(然后展开 its __proto__ 查看 Object.prototype 属性)。

__proto__ 属性被添加到 ES6 中的 JavaScript 中,但它可能不会出现在对象上,因为它来自 Object.prototype,并且它可能用于Object.prototype 支持(直接或间接)的对象(见下文,在栏下)。

如果您想在代码中访问这些属性——包括您在控制台中用来检查对象的代码——您可以使用Object.getPrototypeOf (无论对象是否具有 __proto__ 都有效)和 Object.getOwnPropertyNames .前者为您提供对象的原型(prototype),后者为您提供该对象的所有属性名称(即使它们是不可枚举的)。

因此,对于所有属性的综合列表:

function getAllProperties(obj) {
    var props = [];

    while (obj) {
        props.push.apply(props, Object.getOwnPropertyNames(obj));
        obj = Object.getPrototypeOf(obj);
    }

    return props;
}

实例:

var x = "abcde";
var y = new String(x);
snippet.log(getAllProperties(y).join(", "));

function getAllProperties(obj) {
  var props = [];

  while (obj) {
    props.push.apply(props, Object.getOwnPropertyNames(obj));
    obj = Object.getPrototypeOf(obj);
  }

  return props;
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>


一个对象如何直接或间接地由Object.prototype支持,但仍然有一个原型(prototype)?像这样:

var p = Object.create(null);   // p has no prototype
var o = Object.create(p);      // o has p as a prototype
console.log("__proto__" in o); // false, __proto__ comes from Object.prototype, 
                               // which isn't in o's prototype chain

关于javascript - 有没有办法显示所有新对象的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30318757/

相关文章:

Node.js双console.log输出

javascript - toBe(true) vs toBeTruthy() vs toBeTrue()

javascript - 为什么我刚派发事件就立即触发?

c++ - 具有不同构造函数参数的 CPP 对象数组

javascript - Object.assign什么时候会返回false

javascript - 从 JavaScript 控制台日志中删除引号

node.js - 每当出现catch错误或控制台错误并且服务器在localhost或生产端(heroku)停止时,如何在UI上显示错误警报?

javascript - D3v4 堆积条形图工具提示

javascript - 溢出-y : scroll not working in Firefox and Edge

javascript - 在 Vue.js 中显示整个对象