Javascript console.log不';不显示由类创建的函数

Javascript console.log不';不显示由类创建的函数,javascript,Javascript,我已经使用codesandbox创建了这段代码,接下来的回答是,我有点困惑,因为我认为object和object2是一样的{}认为它与新对象()相同当您使用一个类时,类方法转到原型链,您可以使用对象.getPrototypeOf函数或proto\uuuu属性访问原型链,尽管后者并不可取。当您直接创建对象时,函数是对象本身的属性,因此它不会进入原型链 最终,此代码的结果取决于您的控制台。例如,如果您使用的是Chrome控制台,您将能够看到对象原型的所有内容。显然,您正在使用的控制台没有该功能 如果

我已经使用codesandbox创建了这段代码,接下来的回答是,我有点困惑,因为我认为
object
object2
是一样的
{}
认为它与
新对象()相同

当您使用一个类时,类方法转到原型链,您可以使用
对象.getPrototypeOf
函数或
proto\uuuu
属性访问原型链,尽管后者并不可取。当您直接创建对象时,函数是对象本身的属性,因此它不会进入原型链

最终,此代码的结果取决于您的控制台。例如,如果您使用的是Chrome控制台,您将能够看到对象原型的所有内容。显然,您正在使用的控制台没有该功能


如果需要一致的结果,请不要直接将console.log对象记录下来。相反,将这些对象转换为可以根据需要格式化的字符串,然后记录这些字符串。

Javascript中有一些特性可以区分简单的对象和类,最明显的是(从您的示例中)您发现缺少的访问器方法

根据“getter函数公开对象的内部[[Prototype]]的值”

您可以使用和
\uuuuu proto\uuuu
开始记录类的内部内容:

const object = {
  name: 'Andrew',
  getName() {
    return this.name
  }
}

class ObjectClass {
  constructor(name) {
    this.name = name
  }

  getName() {
    return this.name
  }
}

const object2 = new ObjectClass('Andrew')

console.log(object) // Object {name: "Andrew", getName: function getName()}
console.log(object2, 'object2') // ObjectClass {name: "Andrew", constructor: Object}

有关日志记录的更多详细信息,请检查此问题:

类方法转到原型链。另一方面,在实例上添加箭头函数。因此,您将看到那些使用
console.log
@GabrielePetrioli的控制台,并且仅添加一点,通常控制台只记录自己的属性,而不是原型中的所有内容。尽管如此,并没有控制台规范,所以最好不要依赖任何关于它的细节。它通常是一个调试工具,不要太在意它。“你可以使用proto属性访问它”如果你不这样做,那最好。只要忽略它的存在并假装它不存在,使用
Object.getPrototypeOf()
来代替…我想-不要使用
\uuuu prototypeof
,而是使用
Object.getPrototypeOf
。是的,为
对象.getOwnPropertyNames(Object.getPrototypeOf(foo))
console.log(Object.getOwnPropertyNames(foo).concat(Object.getOwnPropertyNames(foo.__proto__)))