开发过程中,遇到这个问题:

点快速修复的,会出现这个:

后来又查了一下,找到了这个链接:
https://juejin.cn/post/6844903881437085709
才明白其中的缘由:
在 JS 中,往往通过改变原型链实现继承。一旦原型链发生改变,原先可以访问到的原型属性、方法便可能无法访问。考虑最极端的情况,若 obj 原先原型链的最顶端是 Object,此时可以通过原型链访问 Object.hasOwnProperty 方法;而若改变后,顶端不再是 Object,那么访问 obj.hasOwnProperty 访问就会得到 undefined。因此,直接从对象访问原型方法,很可能会带来隐藏的 BUG。
我采用的解决方法也是合理的,即直接在 Object 对象上调用其方法,利用 call 改变其 this 指向到我们的目标对象上,即可安全使用 hasOwnProperty 方法了。
所以将解决方法改成这样:
Object.prototype.hasOwnProperty.call(obj, 'key')
网友评论