gpt4 book ai didi

javascript - 为什么人们不为 polyfill 使用 Object.defineProperty?

转载 作者:行者123 更新时间:2023-11-29 21:02:39 27 4
gpt4 key购买 nike

例如,Mozilla Developer Network 简单地使用 Array.prototype = function 来定义 polyfill,但这会创建一个可枚举的属性来打破 for-in 循环。

所以我使用了 Object.defineProperty(Array.prototype, { enumerable: false ...

这样做有什么危险吗?为什么这不是常见的方式?

这是来自 MDN 的示例 polyfill: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter#Polyfill

下面是 defineProperty 的同一个例子:

Object.defineProperty(Array.prototype, {
enumerable: false,
value: function(func, thisArg) {
'use strict';
if ( ! ((typeof func === 'Function') && this) )
throw new TypeError();

var len = this.length >>> 0,
res = new Array(len), // preallocate array
c = 0, i = -1;
if (thisArg === undefined)
while (++i !== len)
// checks to see if the key was set
if (i in this)
if (func(t[i], i, t))
res[c++] = t[i];
else
while (++i !== len)
// checks to see if the key was set
if (i in this)
if (func.call(thisArg, t[i], i, t))
res[c++] = t[i];

res.length = c; // shrink down array to proper size
return res;
}
});

最佳答案

主要是因为这些 polyfill 是针对 ES5 函数的,并且针对没有 Object.defineProperty 的 ES3 环境。

关于javascript - 为什么人们不为 polyfill 使用 Object.defineProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45744562/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com