【问题标题】:Need help understanding hash in Javascript需要帮助理解 Javascript 中的哈希
【发布时间】:2014-09-20 05:35:10
【问题描述】:

我真的不明白这一点。谁能给我解释一下?来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

// getFoo is property which isn't enumerable
var my_obj = Object.create({}, { getFoo : { value : function () { return this.foo } } });
my_obj.foo = 1;

alert(Object.keys(my_obj)); // will alert only foo

【问题讨论】:

  • 你到底有什么不明白的?这种行为有什么令人惊讶的?您预期会发生什么,您的预期背后的原因是什么?
  • // will alert only foo 的评论意味着他的预期不止于此。他希望getFoo 也能成为一把钥匙。
  • 我对编程有点陌生。我了解对象、函数、警报以及哈希如何工作的想法(例如 ruby​​)。在这里,我有点难以理解发生了什么。例如,我不知道 getFoo 做了什么。有很多大括号,所以让我感到困惑。我假设 {} 部分指定了原型。为什么 my_obj.foo = 1?

标签: javascript oop object hash


【解决方案1】:

唯一定义的键是foo。根据定义,继承的成员不是键。因此,在第一行中,您创建了一个继承自 getFoo 的对象。这个方法getFoo 不是继承对象中的键,而是它的父对象。

在参考文献中,重点放在OWN PROPERTIES

要返回其自身可枚举属性的对象

实际上,keys 是 ES5 对鲜为人知且用处不大的 hasOwnProperty() 方法的复兴,使用方式如下:

for (key in obj)
{
    if (obj.hasOwnProperty(key)) // exclude inherited keys
    {
        // do something with obj[key]
    }
}

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 2011-03-24
    • 1970-01-01
    • 2014-09-06
    • 2011-03-14
    • 2021-07-25
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多