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

时间:2015-05-19 07:00:53

标签: javascript object console.log

说我有这段代码:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

所以要查看所有属性的完整列表:

__proto__

直播示例:

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

答案 1 :(得分:1)

以下是在控制台中找到它的方法

enter image description here