Object.prototype.hasOwnProperty.call() vs Object.prototype.h

Object.prototype.hasOwnProperty.call() vs Object.prototype.hasOwnProperty()

本文关键字:Object prototype vs call hasOwnProperty      更新时间:2023-09-26

在我的JavaScript代码中,我有一个函数,它包含以下一组语句

function someFunc(object,action){
                    for(var property in object){
                        if(Object.prototype.hasOwnProperty.call(object, property)){
                            //TODO
                        }
                    }
                }
}

如果我用替换函数内部的If语句

if(obj.hasOwnProperty(property)){
    //TODO
    }

这两种方法对我来说都很好。我只想知道其中哪一种方法更好,为什么?我知道obj.hasOwnProperty(property)检查对象的个人属性。我也想知道呼叫是如何链接到这里的

object.prototype.hasOwnProperty.call(object, property)

我通常会选择obj.hasOwnProperty(prop)

间接性更少,对其他试图阅读和理解您的代码的人来说会更清楚。它的运行速度也会稍快,因为您不需要重新绑定this的上下文。

我想不出有多少陷阱需要使用其他方法。

  • 如果obj继承自null而非Object.prototype
  • 如果hasOwnProperty已在obj上重新声明
  • 如果hasOwnProperty已在obj的原型链中重新声明

所有这些场景在日常应用程序中都非常罕见,如果你找到了其中一个,那么在那里解决问题是最安全、最简单、最好的,而不是使用更具防御性的Object.prototype.hasOwnProperty.call形式。