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

时间:2016-05-05 09:25:25

标签: javascript oop call

在我的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)

1 个答案:

答案 0 :(得分:4)

我通常会使用obj.hasOwnProperty(prop)

不那么间接,对于那些试图阅读和理解你的代码的人来说,它会更加清晰。它的运行速度会稍快,因为您不需要重新绑定this的上下文。

我无法想到许多需要要求使用其他方法的陷阱。

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

所有这些情况在日常应用程序中都非常罕见,如果您确实找到了其中一种,那么最安全,最简单,最好的解决问题,而不是使用更具防御性的{{1} } form。