admin管理员组文章数量:1794759
解决错误:Do not access Object.prototype method ‘hasOwnProperty‘ from target object no
问题
调用 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版权声明:本文标题:解决错误:Do not access Object.prototype method ‘hasOwnProperty‘ from target object no 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686959994a122432.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论