GetOwnPropertyNames()在javascript中的实现是什么

GetOwnPropertyNames()在javascript中的实现是什么,javascript,Javascript,在学习getownPropertyNames()函数Mozilla MDN时 我遇到了这个例子 // non-enumerable property var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; }, enumerable: false } }); my_obj.foo = 1; console.log(Object.getOwnPropertyNames(

在学习getownPropertyNames()函数Mozilla MDN时

我遇到了这个例子

// non-enumerable property
var my_obj = Object.create({}, {
  getFoo: {
    value: function() { return this.foo; },
    enumerable: false
  }
});
my_obj.foo = 1;

console.log(Object.getOwnPropertyNames(my_obj).sort()); 
// logs ["foo", "getFoo"]
我知道函数getOwnPropertyNames返回所有可枚举和不可计算属性的名称数组

我想知道上面的例子 使用以下函数的上下文是什么?我们在什么情况下使用它

getFoo: {
        value: function() { return this.foo; },
        enumerable: false
      }
我知道这可能是个愚蠢的问题,我正在努力深入学习JS,所以希望你们不要介意回答

谢谢

如果你的问题是“什么时候/为什么要使用
getOwnPropertyNames
”,答案是“任何时候你想得到所有对象自己的属性名,即使是不可枚举的属性名。”但这类问题就回避了


因此:假设您正在编写一个类似于浏览器中的控制台。当用户记录一个对象时,他们可能不仅希望看到该对象的所有可枚举属性,还希望看到不可枚举属性,如
getFoo
。因此,您应该使用
getOwnPropertyNames
而不是
Object.keys
作为in
循环,因为它将包含不可枚举的属性。(在ES2015[aka ES6]及更高版本中,您可能还会使用
getOwnPropertySymbols
,这样您就可以显示使用
Symbol
s而不是字符串命名的属性。)

不清楚您在问什么。您已经询问了
getOwnPropertyNames
的实现是什么(它可以告诉您),但是在问题的文本中,您似乎在问您将如何使用它。