Javascript 如何记录对象而不调用其toString()方法?

Javascript 如何记录对象而不调用其toString()方法?,javascript,google-chrome,console.log,Javascript,Google Chrome,Console.log,如何在控制台上记录对象的所有属性console.log()在某些情况下似乎不够 举个例子: function Person(name) { this.name = name; } console.log(Person); console.log(Person.prototype); var person = new Person('john'); console.log(person); 在Google Chrome上,这将记录: function Person(name) {

如何在控制台上记录对象的所有属性
console.log()
在某些情况下似乎不够

举个例子:

function Person(name) {
    this.name = name;
}

console.log(Person);
console.log(Person.prototype);

var person = new Person('john');

console.log(person);
在Google Chrome上,这将记录:

function Person(name) {
    this.name = name;
}
> Object
Person {name: "john"}

第一个和第三个日志不会显示对象的所有属性。我无法展开(就像在第二个日志中一样)以查看[[Prototype]]或任何其他属性。

如下声明类对象,下面的代码是ES6类的传输版本

ES6课程

class Person {
  name= null;
}
传输代码通过


您需要了解
原型
属性与
构造函数
属性不同

参见代码:

function Person(name) {
this.name = name;
}
Person.length = 1; 
Person.aaaaq = 1; 
console.log(Object.getOwnPropertyNames(Person))
console.dir(Object.getOwnPropertyNames(Person))
Person.prototype.gender = "male";
console.log(Person);
console.log(Person.prototype);
var person = new Person('john');
console.log(person);
prototype
属性可以被视为对象的模板,当
新建
对象时,所有
prototype
属性都将存储到
\uuuuuuuuuuuuuu
中,当您尝试访问
性别
时,它将首先查找
构造函数
属性,如果不存在,它将通过
\uuuu proto\uuuu
查找此属性

最终结果将是:

["length", "name", "arguments", "caller", "prototype", "aaaaq"]
Array[6]0: "length"1: "name"2: "arguments"3: "caller"4: "prototype"5: "aaaaq"length: 6__proto__: Array[0]
Person(name) {
this.name = name;
}
Object {gender: "male"}
Person {name: "john"}
希望这能消除你的困惑。
请检查此演示:

使用
console.dir()
查看原型和所有构造函数

尝试使用
console.dir(Person)
,这对您有帮助吗?这太神奇了!现在我可以展开并查看所有属性。我可以问你,为什么我看不到三次“物体”;我看到的第一根绳子是什么?(展开之前)很抱歉,我不明白您的问题,请您将看到的代码添加到注释中,我将尝试解释。@Jonathannelsen您已经回答了问题,顺便说一句,您应该给出答案。但我想知道,另外,为什么console.dir(Person);记录“>职能人员(姓名)”而非“>对象”。这是因为toString吗?这是因为“Person”是一个原型函数,当您调用它创建的原型函数和对象时。这就是它记录“函数…”的原因。尝试调用
console.log(个人类型)
console.log(个人类型)
。谢谢;“Person”是一个函数,它是一个对象。登录时,它显示“Person(name){this.name=name;}”。我希望能够在控制台中展开以查看所有属性。见“乔纳森·尼尔森”的评论。使用console.dir()我可以看到一切。对不起,如果问题不清楚;问题不在于构造函数、构造函数的原型属性等之间的区别。嗨,函数不是javascript中的对象。函数只会显示定义,只有当你“新建”一个函数时,才会返回一个对象。所有不是原语的东西都是一个对象。你甚至可以添加属性;试试看,console.log(Person.length);还可以尝试console.dir(Person);并尝试在函数本身上添加所需的任何属性键/值=>函数是object.Person.foo='bar';console.log(Person.foo);您可以这样做:console.dir(Object.getOwnPropertyNames(Person)),但函数有内置属性检查:
["length", "name", "arguments", "caller", "prototype", "aaaaq"]
Array[6]0: "length"1: "name"2: "arguments"3: "caller"4: "prototype"5: "aaaaq"length: 6__proto__: Array[0]
Person(name) {
this.name = name;
}
Object {gender: "male"}
Person {name: "john"}