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

时间:2016-08-03 11:25:26

标签: javascript

在研究getOwnPropetyNames()函数时,Mozilla MDN Link

我遇到了这个例子

// 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返回所有enumerable和nonEnumerable属性的name数组。

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

getFoo: {
        value: function() { return this.foo; },
        enumerable: false
      }

我知道这可能是个愚蠢的问题,我正在努力深入学习JS,所以希望你们都不介意回答。

谢谢

1 个答案:

答案 0 :(得分:1)

如果你的问题是"何时/为什么你会使用getOwnPropertyNames",答案是"任何时候你想获得所有对象拥有的属性名称,即使是不可数的。"但那种问题引发了这个问题。

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