【发布时间】:2022-01-06 16:36:32
【问题描述】:
对象构造函数在过去的js更新中得到了几个方法,如apply、assign、entry、fromEntries、keys、values...
这些将是包含在对象原型中的优秀候选对象。
Object.prototype.values = function(f) {
return Object.values(this)
}
我们甚至可以将它们结合起来实现地图或过滤器:
Object.prototype.map = function(f) {
return Object.fromEntries(Object.entries(this).map(f))
}
// now we could do...
obj1 = {a:1, b:2}
obj1.values() // [1,2]
obj1.map([a,b] => ['x'+a: b+1]) // {xa:2, xb:3}
与例如相比,这种语法毫无疑问要优越。
Object.fromEntries(Object.entries(obj1).map([a,b] => ['x'+a: b+1])))
不过
obj1.entries()
.map([a,b]=>['x'+a: b+1])
.fromEntries()
更具可读性。
向后兼容性似乎不是问题,因为原型链中的更多对象会掩盖方法(例如,Array.prototype.map 仍然可以正常工作)。
采取了其他路线,一定有技术原因。我很好奇它是什么。
是否存在上述方法会失败的示例(可能在遗留代码中)?
【问题讨论】:
-
在这篇文章中根本没有看到任何与调试代码相关的问题。你确定你不是想在softwareengineering.stackexchange.com 上发布这个吗?
-
@Tibrogargan 并非所有问题都需要与调试代码相关。
-
有趣的是,即将发布的 JavaScript 规范引入了
Object.hasOwn(obj, key)作为obj.hasOwnProperty(key)的更有用的替代品,原因解释为 here。 -
但是,它们确实需要关注主题,请参阅stackoverflow.com/help/on-topic。 @Unmitigated
-
您考虑过您的obligations before asking 吗?你没有提到 TC-39 委员会,这些事情是在哪里讨论和决定的,正如你所说的“背后的技术原因......”。