javascript - 使用 hasOwnProperty 的合适/推荐方法是什么?

标签 javascript

如果对象可以包含自己的名为“hasOwnProperty”的属性:

> a={abc: 123};
{ abc: 123 }
> a.hasOwnProperty("abc");
true
> a['hasOwnProperty'] = 1;
1
> a.hasOwnProperty("abc");
TypeError: a.hasOwnProperty is not a function
...

这有效,有点丑陋的界面,如果你考虑 Object.keys(), Object.assign() 等..那么,有更好的方法吗?
> Object.hasOwnProperty.call(a, "abc");
true
> Object.hasOwnProperty.call(a, "hasOwnProperty");
true

为什么解决方案不应该是唯一推荐的方法?直接从对象使用方法似乎是失败的秘诀,特别是如果它包含外部数据(不受控制)

最佳答案

使用 hasOwnProperty 的适当/推荐方法是作为过滤器,或确定对象是否...具有该属性的方法。正是他们在第二个命令中使用它的方式 a.hasOwnProperty('abc') .

通过覆盖对象 hasOwnPropertya['hasOwnProperty'] = 1 的属性(property),虽然它安全有效,但只是删除了在该对象上使用 hasOwnProperty 函数的能力。

我在这里错过了你真正的问题吗?似乎您已经从示例中知道了这一点。

经过

'using methods directly from an object seems like a recipe for a failure



你指的是这样的事情:
 > dog = {speak: function() {console.log('ruff! ruff!')}};
 > dog.speak(); // ruff! ruff!

因为这在您可以想象的许多方面都非常有用。

关于javascript - 使用 hasOwnProperty 的合适/推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41604063/

相关文章:

javascript - 如何添加到 Vue Class Bindings 的数量?

javascript - 如何使用 javascript 访问 HTML 元素的数据属性

javascript - ThreeJS Android 性能

JavaScript 试图为 html 制作一个时钟,无法分辨出什么坏了

javascript - jquery ui - 如何使用谷歌 CDN

javascript - 是否可以仅对一个快速端点使用多个中间件功能?

javascript - 如果端点既删除资源又创建资源,这仍然是惯用的 POST 吗?

javascript - 在移动浏览器中更改窗口方向时应显示相同的内容

javascript - 禁用和启用选中复选框的按钮

javascript - 从表单到 Javascript 的变量