<template>
<div>
<ul>
ESLint 不允许从目标对象调用 Object 原型方法,obj.hasOwnProperty(key)报错
</ul>
<div>
Do not access Object.prototype method 'hasOwnProperty' from target object
no-prototype-builtins
</div>
</div>
</template>
<script>
export default {
name: "PdfDown",
components: {},
data() {
return {};
},
methods: {
// 进阶写法3
objToArrayFun3(data) {
for (const key in data) {
if (Object.prototype.hasOwnProperty.call(data, key)) {
console.log(`${key}: ${data[key]}`);
}
//下面这种写法会报凑 ESLint 不允许从目标对象调用 Object 原型方法。
// if (obj.hasOwnProperty(key)) {
// console.log(`${key}: ${obj[key]}`);
// }
//在 JS 中,往往通过改变原型链实现继承。一旦原型链发生改变,原先可以访问到的原型属性、方法便可能无法访问。考虑最极端的情况,若 obj 原先原型链的最顶端是 Object,此时可以通过原型链访问 Object.hasOwnProperty 方法;而若改变后,顶端不再是 Object,那么访问 obj.hasOwnProperty 访问就会得到 undefined。因此,直接从对象访问原型方法,很可能会带来隐藏的 BUG。
//即直接在 Object 对象上调用其方法,利用 call 改变其 this 指向到我们的目标对象上,即可安全使用 hasOwnProperty 方法了。
}
},
},
mounted() {
const arrObj = { age: 12, name: 1, number: 123 };
this.objToArrayFun3(arrObj);
},
};
</script>
<style scoped lang="scss"></style>
【bug】ESLint 不允许从目标对象调用 Object 原型方法,obj.hasOwnProperty(key)报错
最新推荐文章于 2024-05-20 15:17:08 发布