我需要找出obj对象中“name”的值。不调用函数怎么能找到它呢?
我只想使用obj.isActive
而不是obj.isActive()
let obj = {
name: "X Æ A-12 Musk",
isActive: function () {
return this.name.length > 4;
},
};
// and after a while I need to check if is active:
console.log(obj);
// {
// name: 'X Æ A-12 Musk',
// isActive: [Function: isActive] <--------- NOT COOL !
// }
如果使用IFEE:
let obj = {
name: "X Æ A-12 Musk",
isActive: (function () {
return this.name.length > 4;
})(),
};
我得到:
return this.name.length > 4;
^
TypeError: Cannot read properties of undefined (reading 'length')
4条答案
按热度按时间j9per5c41#
如果你不想把isActive作为一个函数调用,你可以使用getter。
wlwcrazw2#
与雷的回答类似,下面这样的情况如何:
如果它有帮助,并且你经常使用它,你可以创建一个helper函数:
zqry0prt3#
我无法向该对象添加更多属性
您可以创建由原始对象原型化的 Package 器对象,并在前者中定义getter。
q43xntqr4#
从您的问题中还不清楚为什么可以执行IIFE而不能执行getter,但这里有一些其他潜在的解决方法。
1.使用Proxy拦截属性访问器:
如果你不能修改对象本身,你可以把它 Package 在一个Proxy中,然后把代理传递给库。
这可以被推广到调用任何getter函数,如果它存在于目标上:
注意:我在这里调用
target[prop]()
而不是x()
,因为调用不关联的函数x()
具有可能产生错误或意外结果的作用域影响(这也是导致IIFE崩溃的问题)。2.使用
Object.defineProperty
建立getter。同样,我不清楚为什么不能直接在对象字面量上放置getter,所以我也不知道这是否可行。