0

我知道这听起来像是一个荒谬、不必要的问题,但事实并非如此。

https://caniuse.com/?search=Hasownproperty显示 100% 的跟踪桌面客户端支持,正如您所期望的那样。但是切换到跟踪的移动客户端显示仅 95.4% 的支持率令人震惊,考虑到移动客户端甚至超过甚至超过桌面客户端,这意味着大约 2.5% 的当前访问网页的客户端不原生支持hasOwnProperty

鉴于包括 jQuery、Modernizr 和 Crockford 的 json2.js 在内的大量第三方库引用hasOwnProperty并没有对其进行 polyfill,因此对其进行 polyfill 非常重要。

我正在寻找一种hasOwnProperty根据规范进行填充的方法。它可以使用循环进行浅层填充(尽管不正确)for in,但这不会返回false继承的属性。

4

1 回答 1

1

请检查object.hasOwnProperty的 polyfill 部分

这是实现

(function(w){
var isFunction=w.isFunction||(w.isFunction=function(x){return typeof(x)==='function'}),
has=w.has||(w.has=function(o,p){var e=p in o;return {value:e && (e=o[p]) && true,refer:e,valueOf:function(){return this.value}}}),
Polyfill=w.PolyfillMethod||(w.PolyfillMethod=function(o,p,x){var e=has(o,p);if(e && (e=isFunction(e.refer))===false){o[p]=x};return e}),
theProto=w.Object.prototype;

Polyfill(theProto,'hasOwnProperty',function(x){var o,e=this,p=String(x);return p in e && (o=e.__proto__||e.constructor.prototype,(p in o ===false)||e[p]!== o[p])});

})(window);
于 2020-10-04T15:21:02.840 回答