gpt4 book ai didi

JavaScript/环回 : add property which value is the result of a function

转载 作者:行者123 更新时间:2023-12-02 15:18:28 24 4
gpt4 key购买 nike

编辑:这不是重复的。虽然答案很好,但问题适用于 loopbackjs 的上下文。在那里,大多数属性都是异步访问的。我尝试了建议的解决方案,但它不起作用,因为属性 count 是异步访问的:

node.__count__children(function(err, count) {
if (err) {
console.log(err);
return;
}

return count;
});

这意味着我不能直接依赖语言功能,而必须考虑异步性。编辑结束

在 django/python 中,我可以像这样定义一个属性:

@property
def count_children(self):
return len(self.children)

这在 JavaScript 中也可能吗?实际上我在环回上下文中需要它,但也许这是该语言的一个功能?

我尝试过操纵原型(prototype):

Node.prototype.count_children = function() {
return this.children.length;
}

但这只是向对象添加了一个函数 count_children() ,它并没有将该函数的值作为属性。这在 JavaScript 中可能吗?

最佳答案

认为您是说您希望在属性上实现“吸气”行为。基本上你想调用一个没有括号的函数。如果是这样,您可以使用 Object.defineProperty() 定义它:

Object.defineProperty(Node.prototype, "count_children", {
get: function() {
return this.children.length;
}
});

document.body.appendChild(document.createElement("pre")).textContent = "Total <li> count: " +
document.querySelector("ul").count_children;
<ul>
<li>foo
<li>bar
<li>baz
</ul>

如果您需要包装的行为是异步的,则似乎需要回调,因此 getter 属性不会提供分配回调的机会。

如果您正在包装的 API 返回类似“Promise”对象的内容,您仍然可以返回该对象。您还可以返回自己的 Promise,无论是作为新 ECMAScript 6 的一部分、作为外部库还是作为您自己的更简单的实现。

关于JavaScript/环回 : add property which value is the result of a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34280150/

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