在研究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返回所有可枚举和nonEnumerable属性名称的数组。

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

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


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

谢谢

最佳答案

如果您的问题是“何时/为什么使用getOwnPropertyNames”,则答案是“任何时候您都希望获得对象自己的所有属性名称,甚至是不可枚举的名称。”但这就是问题。

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

关于javascript - JavaScript中GetOwnPropertyNames()的实现是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38742221/

10-12 07:05