Object.prototype.hasOwnProperty.call() 与 Object.prototype.hasOwnProperty()

Fai*_*eer 3 javascript oop call

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

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

如果我将函数内的if 语句替换为

if(obj.hasOwnProperty(property)){
    //TODO
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_*nce 6

我通常总是和obj.hasOwnProperty(prop).

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

我想不出很多需要您使用其他方法的陷阱。

  • 如果obj继承自nullObject.prototype
  • 如果 hasOwnProperty 已经重新申报obj
  • 如果 hasOwnProperty 已在obj的原型链中重新声明

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