解决错误:Do not access Object.prototype method ‘hasOwnProperty‘ from target object no-prototype-builtins

问题

 调用 hasOwnProperty 报错:不要使用对象原型上的方法,因为原型的方法可能会被重写

var person = {
  name: 'xiaoliao',
  sex: 'sex'
  show: function(){
    return this.name + '' + this.sex
  }
}

person.hasOwnProperty('sex')    //Do not access Object.prototype method 'hasOwnProperty' from target object  no-prototype-builtins

   出现这种报错是因为使用Vue.js启动项目会自动生成配置为与ESLint一起使用的样板

ESLint是一个能帮助识别报告JS中的不良模式,以便维护代码

  在ECMAScript5.1中,新增了 Object.create,它支持使用指定的 [[Prototype]] 创建对象。Object.create(null)是一种常见的模式,用于创建将用作映射的对象

Object.create(null) 创建的对象是一个空对象,在该对象上没有继承 Object.prototype 原型链上的属性或者方法,例如:toString(), hasOwnProperty()等方法

因为 no-prototype-builtins 规则不允许Object.prototype直接从对象调用方法,所以会导致这种错误

解决 

 可以通过使用call()函数来调用不属于本身this对象的方法:person.hasOwnProperty.call()

var person = {
  name: 'xiaoliao',
  sex: 'sex'
  show: function(){
    return this.name + '' + this.sex
  }
}

person.hasOwnProperty('sex')    //Do not access Object.prototype method 'hasOwnProperty' from target object  no-prototype-builtins

//解决方案
person.hasOwnProperty.call('sex')   //true

关于call方法 

call() 方法是预定义的 JavaScript 方法。

它可以用来调用所有者对象作为参数的方法。

通过 call(),您能够使用属于另一个对象的方法。

 这里相当于改变了当前this指向,我 person1 虽然并没有show方法(就和你无法直接访问原型上的 hasOwnProperty方法一样),但是我可以通过 call 使用person中的 show 方法 来使用,作用于该 show 方法上的相关属性还是我本身 person1 的

var person = {
  name: 'xiaoliao',
  sex: 'man'
  show: function(){
    return this.name + '' + this.sex
  }
}

var person1 = {
  name: 'xiaowang',
  sex: 'woman'
}

//调用person的show方法,并用于 person1
person.show.call(person1)    //xiaowang woman

  • 39
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值