gpt4 book ai didi

javascript - 为什么 coffeescript 在扩展 Object 时要添加函数?

转载 作者:行者123 更新时间:2023-11-30 17:28:44 24 4
gpt4 key购买 nike

我正在尝试编写一个辅助方法来查找两个散列/对象的交集,如下所示...

Object::intersect = (obj)->
t = {}
t[k] = @[k] for k of obj
t

x = { a: 1, b: 2, c: 3 }
w = { a: true, b: 3 }
x.intersect(w) #=> { a: 1, b: 2, intersect: [Function] }

除了添加“相交”键/值外,结果如我所料/想要的。

我在这里错过了什么?

最佳答案

您的属性是可枚举的,这就是为什么它在您迭代时出现在两个对象中的原因。

一个解决方案是这样的:

Object.defineProperty Object.prototype, 'intersect', value:(obj)->
t = {}
t[k] = @[k] for k of obj
t

Demonstration (编译为 JS)

但是修改不属于您的对象,尤其是 Object 是一种糟糕的做法,可能会给其他编码人员带来许多意想不到的问题。阅读Maintainable JavaScript: Don’t modify objects you don’t own .

在这里,简单地定义一个将两个对象作为参数的函数会变得简单和清晰得多......

关于javascript - 为什么 coffeescript 在扩展 Object 时要添加函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23655807/

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