Object.prototype.hasOwnProperty.call() 对比 Object.prototype.hasOwnProperty()

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

在我的 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
  • 上重新声明
  • 如果hasOwnPropertyobj的原型链中被重新声明

所有这些情况在日常应用程序中都非常罕见,如果您确实发现了其中一种情况,那么最安全、最简单、最好的方法就是解决问题,而不是使用更具防御性的 Object.prototype.hasOwnProperty.call 形式.