【问题标题】:Object.prototype.hasOwnProperty.call() vs Object.prototype.hasOwnProperty() [duplicate]Object.prototype.hasOwnProperty.call() 与 Object.prototype.hasOwnProperty() [重复]
【发布时间】:2016-08-31 00:37:12
【问题描述】:

在我的 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) 检查对象的个人财产。我也想知道 call 是如何在这里链接的

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

【问题讨论】:

  • 如果对象因为这个或那个原因没有办法访问 Object.prototype(通常所有对象都有)你可以选择使用第一种方法。

标签: javascript oop call


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2012-08-14
    • 2011-10-26
    相关资源
    最近更新 更多