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

Is there a way to display all new object's properties?

假设我有这个代码:

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

当我 console.log(y) 它只有 return 以下内容: String {0: "a", 1: "b", 2: "c", 3: "d", 4: "e", length: 5, [[PrimitiveValue]]: "abcde"}

但我仍然可以说 y.charAt(0); 它会 return "a" 那么这个 charAt 方法隐藏在哪里?以及如何在 console.log?

中看到它

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

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

如果您想在 代码 中访问这些属性——包括您在控制台中用于检查对象的代码——您可以使用 Object.getPrototypeOf (which works whether the object has __proto__ or not) and Object.getOwnPropertyNames。前者为您提供对象的原型,后者为您提供该对象的 属性 个名称中的 all(即使它们是不可枚举的)。

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

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的支持,但仍然有一个原型?像这样:

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

您可以通过以下方式在控制台中找到它