首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Object.hasOwnProperty与Object.prototype.hasOwnProperty的实际差异

Object.hasOwnProperty与Object.prototype.hasOwnProperty的实际差异
EN

Stack Overflow用户
提问于 2019-10-25 07:59:03
回答 1查看 458关注 0票数 3

向版主澄清,因为一些版主在浏览问题时速度有点快,我必须强调,我不是在问为什么要使用Object.prototype.hasOwnProperty.call而不是myObject.hasOwnProperty。魔鬼就在细节里。

ESLint rule no-prototype-builtins禁止使用来自Object原型的内置。它是针对这样的代码提供的:

代码语言:javascript
复制
function serverMethodToParseClientInput(json){
  const o = JSON.parse(json);
  if (o.hasOwnProperty("foo")) {
    doSomethingMeaningful();
  }
}


const stringFromClient = "{\"hasOwnProperty\":1, \"reason\": \"Crash your system\"}";

serverMethodToParseClientInput(stringFromClient);

试图调用以null为原型创建的对象的方法也会失败,我认为这是一个更合理的防范措施。例子:const o = Object.create(null);.

而不是obj.hasOwnProperty(field),您应该使用Object.prototype.hasOwnProperty.call(obj, field)。我看不出这和Object.hasOwnProperty.call(obj, field)有什么区别。当然,Object不是它自己的原型,所以有不同的类型,但是由于您可以在任何一个对象上覆盖道具,所以这里没有太多的保护措施,IMHO。

所以,我想知道,当Object的原型实现时,Object是否有什么意义呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-25 08:42:03

使用Object.hasOwnProperty很奇怪,因为它让人觉得您在使用像Object.assign()这样的静态方法。

它仍然工作,因为如果在Object上找不到一个属性,它将返回到Function.prototype对象。并且,该对象继承自Object.prototype。因此,如果您有Function.prototype.hasOwnProperty的自定义实现,那么Object.hasOwnProperty将使用该实现而不是Object.prototype.hasOwnProperty

代码语言:javascript
复制
console.log( Object.hasOwnProperty === Object.prototype.hasOwnProperty ) // true
console.log( Object.getPrototypeOf(Object) === Function.prototype ) // true
console.log( Object.getPrototypeOf(Function.prototype) === Object.prototype ) // true

Function.prototype.hasOwnProperty = _ => 'custom implementaion in Function.prototype'

const obj = { prop: 10 }

console.log(Object.hasOwnProperty.call(obj, 'prop')) // custom implementaion
console.log(Object.prototype.hasOwnProperty.call(obj, 'prop')) // true

注:Object.prototype.hasOwnProperty.call(myObj, prop)myObj.hasOwnProperty(prop)之间的区别解释了here

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58554462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档