gpt4 book ai didi

Javascript Object.defineProperty 属性与方法同名

转载 作者:行者123 更新时间:2023-12-03 03:06:33 28 4
gpt4 key购买 nike

我是 js 世界的新手,发现 jquery 将许多属性声明为方法,这让我非常不舒服。例如 $("#foo").parent() 我认为应该是属性。

我知道js也可以定义属性,所以我想尝试将这些方法重新定义为相应的属性。

Object.defineProperty($.fn,"parent",
{
get:function () {
return this.parent()
},
configurable:false,
enumerable:true
});

然后我可以像这样使用它 $("#foo").parent

但是我得到了一个 stackoverflow

jqueryplus.js:180 Uncaught RangeError: Maximum call stack size exceeded
at n.fn.init.get [as parent] (jqueryplus.js:180)
at n.fn.init.get [as parent] (jqueryplus.js:181)
at n.fn.init.get [as parent] (jqueryplus.js:181)
at n.fn.init.get [as parent] (jqueryplus.js:181)
at n.fn.init.get [as parent] (jqueryplus.js:181)
at n.fn.init.get [as parent] (jqueryplus.js:181)
at n.fn.init.get [as parent] (jqueryplus.js:181)
at n.fn.init.get [as parent] (jqueryplus.js:181)
at n.fn.init.get [as parent] (jqueryplus.js:181)
at n.fn.init.get [as parent] (jqueryplus.js:181)

这里发生了什么?在我看来,变量/属性和方法应该可以与我在其他语言(例如 c#、kotlin)中熟悉的名称相同......

最佳答案

您正在定义 Object.parent 来调用自己,这是一个无限递归循环。

jQuery 定义函数来获取属性的原因是它在运行时计算动态值,使用老式的编码风格(getter 和 setter 仅存在于 ES5.1 specs 中)。也许您可以做的是为这些属性创建快捷方式(Object.prototype.par而不是parent),但恕我直言,没有任何努力可以做到这一点。

关于Javascript Object.defineProperty 属性与方法同名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47139630/

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