![]() |
1
10
首先,两个版本都使用闭包是正确的。 在我看来,第一个版本更干净,在现代javascript中更受欢迎。第一种样式的主要潜在缺点是无法有效地将对象分配给构造函数的原型,如果要创建许多相同的对象,这将非常有用(而且效率更高)。
第二种风格,我实际上从未在生产Javascript中见过。通常,您会实例化
|
![]() |
2
4
并不是说
|
![]() |
3
2
您应该将示例与此代码段进行比较
因此,当调用new create()时,它使用两个方法和一个实例变量(即:counter)初始化新对象。Javascript本身没有封装,因此您可以访问c.counter,如下所示:
通过使用闭包(如示例所示),计数器现在不再是一个实例字段,而是一个局部变量。一方面,您不能从create()函数外部访问。另一方面,increment()和print()可以访问,因为它们在封闭范围内关闭。因此,我们最终得到了一个非常好的对象封装仿真。 |
![]() |
4
2
好吧,我不想卷入一场关于如何在JavaScript中创建对象的宗教战争,因为有些人强烈认为有正确和错误的方法。
但是,我想指出第二组代码中的一些不太有趣的东西,即,您正在为包含在
当你这么做的时候
但是当你打电话的时候
|
![]() |
5
1
您的第二个示例仍然使用闭包,因为increment和print函数仍然作用于变量,否则在调用时超出范围
|
![]() |
6
1
克里斯蒂安·海尔曼在这方面写了一篇相当不错的文章 the module pattern 你所描述的可能有助于你理解它,以及它为什么有用。 |
![]() |
7
1
从OOP背景来看,这种语法更有意义:
|
![]() |
8
1
我总是在我的应用程序中使用这样的闭包,我自己定义的所有方法都在MYAPP命名空间中,v1和v2只能由MYAPP中的方法访问。在我的应用程序中,我通常只编写一个“app.js”文件,所有的js代码都在里面。我想您可以定义一个名为“Registry”的方法来定义MYAPP中的私有变量,然后在方法中使用它。当您想在html文件中添加额外的代码时,所有额外的变量和方法都应该由Registry方法定义,就像JQuery.extend方法一样。我听说如果在IE浏览器中使用太多闭包,很容易导致堆栈溢出。(在我看来) |
![]() |
9
0
正如其他人指出的那样,解决办法是使用
|
![]() |
Softly · 单选按钮未按预期取值 1 年前 |
|
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
![]() |
assembler · Nextjs没有处理发布请求 1 年前 |
|
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
![]() |
Toniq · javascript为php保存多维数组 1 年前 |