gpt4 book ai didi

javascript - 具有缓存静态属性的 JavaScript 单例模式如何工作?

转载 作者:行者123 更新时间:2023-12-03 05:20:43 25 4
gpt4 key购买 nike

这是我基于 one by Rob Dodson 修改的示例.

function User() {  
// do we have an existing instance?
if (User.instance) {
return User.instance;
}

// proceed as normal
this.firstName = 'John';
this.lastName = 'Doe';

// cache
User.instance = this;

// implicit return
// return this;
}

a = new User();
b = new User();
b.firstName = "Paul"
console.log(a)

我刚刚学习,所以我可能会使用外行术语,但如果我理解正确的话,User.instance = this; 克隆User,并且该克隆成为我们只能再访问User了。那么其完整的流程是这样的:

a = new User();

我们有现有的User.instance吗?否。因此,继续执行代码,并将 a.firstName 设置为 John,将 a.lastName 设置为 Doe。现在,复制一个名为 John Doe 的 this 对象,并将其设置为 User 构造函数的永久部分。是什么让它永久存在?因为代码永远不会再次到达设置它的行。为什么?因为……

b = new User();

我们有现有的User.instance吗?是的。因此,返回我们已经存储的User.instance,并移回函数之外。

a是如何引用User.instance的? --我不明白this是如何隐式返回的 是返回到 a 的内容,而 b 则是克隆。

最佳答案

if I understand correctly, User.instance = this; clones User, and that clone becomes …
… make a copy of this object …

没有。赋值不会复制/克隆对象,它会将右侧的完全相同的对象引用分配给左侧的变量(或属性等)。这就是为什么 a === User.instanceb = User.instance

同样的情况发生在 b = new User(); 中 - new User() 的返回值没有被克隆什么的,而是直接分配给 b.

关于javascript - 具有缓存静态属性的 JavaScript 单例模式如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41398632/

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