gpt4 book ai didi

javascript - 如何声明一个 “deferred”赋值的值?

转载 作者:行者123 更新时间:2023-11-29 16:45:49 24 4
gpt4 key购买 nike

简而言之:

ab 为一些对象,令pb 的属性。此属性可能现在存在,也可能稍后由于某些事件而出现。我正在寻找一种方法来使分配 a.p = b.p 以“等待”b.p 准备就绪。

详情:

o 成为一个对象:

const o = {};

在我正在处理的真实脚本中,o 是一个具有许多属性的自定义对象,但它们没有引用当前问题,所以让 o 为空.

在相同的范围内,创建了一个新的 link 元素以将样式表动态附加到当前文档:

const link = document.createElement('link');
Object.entries({rel: 'stylesheet', type: 'text/css', href: '/style.css'})
.forEach(([name, value]) => link.setAttribute(name, value));
document.head.appendChild(link);

在此之后,我希望 o 具有指向 link.sheetsheet 属性,即类似这样的内容:

o.sheet = link.sheet; // not working

它不起作用,因为 link.sheet 仅在 link.onload 事件触发后创建。我可以为此事件创建处理程序:

link.addEventListener('load', function() {
return this.sheet;
});

但是为了代码纯净,这个函数应该是访问不到o的,所以我不想在里面写o.sheet = this.sheet函数的主体,或将 o 作为参数传递给它等。我想创建 o.sheet 并将结果分配给此处理程序之外的结果。

所以我想赋值应该不是o.sheet = link.sheet,而是o.sheet = something_else,其中something_else是我还不知道什么。也许是一个 promise ,或者特殊的 setter/getter ,或者什么?

最佳答案

你可以用 sheet getter 做这样的事情:

Object.defineProperty(o, 'sheet', {
get() {
return link.sheet
}
})

因此,在加载样式表之前,o.sheet 将为 null 并稍后更正对象。

这是一个简单的演示:http://plnkr.co/edit/QkPf9zHEkWaIlfUA5usZ?p=preview

关于javascript - 如何声明一个 “deferred”赋值的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41521980/

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