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
上重新声明
- 如果
hasOwnProperty
在obj
的原型链中被重新声明
所有这些情况在日常应用程序中都非常罕见,如果您确实发现了其中一种情况,那么最安全、最简单、最好的方法就是解决问题,而不是使用更具防御性的 Object.prototype.hasOwnProperty.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)
我通常会选择 obj.hasOwnProperty(prop)
。
减少了间接性,对于试图阅读和理解您的代码的其他人来说会更加清晰。它还会 运行 稍微快一些,因为您不需要为 this
.
我想不出有多少陷阱会需要你使用其他方法。
- 如果
obj
继承自null
而不是Object.prototype
- 如果
hasOwnProperty
已在obj
上重新声明
- 如果
hasOwnProperty
在obj
的原型链中被重新声明
所有这些情况在日常应用程序中都非常罕见,如果您确实发现了其中一种情况,那么最安全、最简单、最好的方法就是解决问题,而不是使用更具防御性的 Object.prototype.hasOwnProperty.call
形式.