gpt4 book ai didi

javascript - 在 Angular 的 window 对象中存储值有什么好处?

转载 作者:行者123 更新时间:2023-11-28 17:14:22 25 4
gpt4 key购买 nike

我正在经历this code ,然后this line我看到了

(window).user = user;

我想知道将用户对象设置为窗口对象中的值有何重要性?我知道这可能是为了将来更容易访问,但用户对象也存储在可观察对象中,并且 get user() 方法从可观察对象中检索它:

getUser(): Observable<any> {
return this.$userSource.asObservable();
}

同样来自this answer我的理解是:

In JavaScript, any global variable is actually a property of the window object. Using one is equivalent to (and interchangeable with) using the other.

所以我的问题是:

  1. 将用户对象设置为窗口对象中的值有何重要性?
  2. 如果我们删除了在窗口对象中存储代码的行,代码仍然可以正常运行吗?
  3. TypeScript 类中的全局变量与 window 对象的属性相同吗?例如:是this value也是 window 对象的属性?

最佳答案

在全局上使用变量几乎没有问题。

  1. 窗口是全局的。

以下是为什么这是危险的示例。

window.item = {
name: 'Something great'
};
function selectItem() { //wrong line
item.name = 'selected';
}
selectItem(event.target);

正如您所看到的,开发人员忘记为函数 selectItem 添加参数 item。预计会更改单击项目的名称,但全局项目将被更改。

  • this = window,如果您不使用 strict modethis 等于 window
  • 让我们使用相同的示例,但这次我们将使用上下文。

    function selectItem() {
    this.name = 'selected'
    }
    const item = {
    name: 'An item'
    }
    selectItem.call(item); //Assume that item is somehow undefined or null.

    同样的结果,window.name 将被更改。

  • global就是全局的,封装一下。
  • 我可以轻松访问窗口及其变量。我也可以定义与您相同的变量。或者我可能会访问您的变量,这将是一个安全问题。

  • 测试
  • 您无法轻松测试具有全局变量的内容。因为它没有封装到您的范围内。

  • 在全局范围内,没有垃圾回收。我想危险已经足够明显了。
  • 回答您的问题:

    1. 阅读上文
    2. 阅读上文
    3. 该线路具有公共(public)属性(property)。它不是全局性的。它没有在窗口上定义。它将成为实例的属性。

    关于javascript - 在 Angular 的 window 对象中存储值有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53851003/

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