使用模块模式和实例化新对象之间的区别

瓦利里翁

我正在尝试重组一些JavaScript,并且对模块模式感到困惑。

我现在拥有的一种方法是简单地声明一个包含此类组件所有功能的类。

var Foo = function(){
    this.Bar = {};
    ...
}

并创建一个新实例以在组件中使用。但是我也读过有关模块模式的信息,我看不出将其与我所拥有的相比有什么好处,因为它似乎以相同的方式做了同样的事情,只是方式更加复杂。也许我只是没有遇到过使它成为更好选择的情况。例如,这样的模式:

var module = (function () {
    // private variables and functions
    var foo = 'bar';

    // constructor
    var module = function () {
    };

    // prototype
    module.prototype = {
        constructor: module,
        something: function () {
        }
    };

    // return module
    return module;
})();

var my_module = new module();

与我已经拥有的似乎没有明显的不同。这种模式让我做什么,而我却无法做到?

先生代码

两者之间的主要区别在于第一个示例,如果要使用原型,则不能拥有私有变量和函数。您可以拥有私有变量和函数,但前提是您必须通过将公共属性和方法附加到来在构造函数中创建它们this

具有私有变量和函数的示例1:

var Foo = function(){
    var privateVar = "priv";

    function privateFunction(){
        console.log(privateVar);   
    }

    this.publicProperty = 1;

    this.publicFunction = function(){
        console.log(privateVar);
    }
}

如果您不想使用原型,则上面没有问题。但是,如果这样做,那么没有第二个示例所受益的新范围,就无法拥有私有变量。

如您所见,您必须将所有内容都包含在构造函数中,而第二个示例可以将构造函数保留为仅用于初始化变量。

相反,第二个示例中的原型方法超出了构造函数的范围,因此它们不能在构造函数中使用任何函数变量。原型方法所需的所有函数和变量必须在外部闭包范围内声明。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对象和实例之间的区别

来自分类Dev

对象和实例之间的区别:C ++

来自分类Dev

模板化模式对象和外部密码对象之间有什么区别?

来自分类Dev

使用构造函数参数实例化类对象与不使用参数C *实例*运算符之间的区别

来自分类Dev

“类型”,“实例”,“类”和“对象”概念之间的区别

来自分类Dev

加载类和实例化类之间的区别

来自分类Dev

QML的组件和实例化器之间的区别?

来自分类Dev

C ++定义和实例化之间有什么区别?

来自分类Dev

JavaScript模块化和依赖注入之间的区别

来自分类Dev

JavaScript模块化和依赖注入之间的区别

来自分类Dev

Java中参数化实例化和原始类型实例化之间的区别

来自分类Dev

使用new和不使用new初始化对象之间的区别是什么

来自分类Dev

模块和存在之间的区别

来自分类Dev

序列化和普通对象存储之间的区别?

来自分类Dev

使用Java Stream实例化具有索引和特定Enum值的新对象的不同数量

来自分类Dev

访问,实例化和声明模块之间有什么区别?

来自分类Dev

无法使用节点+ TypeScript从导入的模块实例化对象?

来自分类Dev

C#中的对象实例化之间的区别:将对象存储在引用中与直接调用方法

来自分类Dev

类实例化任意类的对象。使用什么模式?

来自分类Dev

FileIO对象和open返回的对象之间的区别(文件名,模式)

来自分类Dev

变量和对象之间的区别

来自分类Dev

对象和类之间的区别

来自分类Dev

AngularJS模块和子模块实例化

来自分类Dev

初始化对象数组和初始化对象之间有什么区别?

来自分类Dev

如何实例化和使用包含其他对象的对象?

来自分类Dev

使用带有和不带有return语句的函数初始化JavaScript对象之间有什么区别?

来自分类Dev

导入类和直接在对象声明/初始化中使用类之间的区别

来自分类Dev

使用Pyserial,为什么在实例化Serial类和用于写入数据的Serial对象之间需要延迟?

来自分类常见问题

map和forEach实例修改之间的区别

Related 相关文章

  1. 1

    对象和实例之间的区别

  2. 2

    对象和实例之间的区别:C ++

  3. 3

    模板化模式对象和外部密码对象之间有什么区别?

  4. 4

    使用构造函数参数实例化类对象与不使用参数C *实例*运算符之间的区别

  5. 5

    “类型”,“实例”,“类”和“对象”概念之间的区别

  6. 6

    加载类和实例化类之间的区别

  7. 7

    QML的组件和实例化器之间的区别?

  8. 8

    C ++定义和实例化之间有什么区别?

  9. 9

    JavaScript模块化和依赖注入之间的区别

  10. 10

    JavaScript模块化和依赖注入之间的区别

  11. 11

    Java中参数化实例化和原始类型实例化之间的区别

  12. 12

    使用new和不使用new初始化对象之间的区别是什么

  13. 13

    模块和存在之间的区别

  14. 14

    序列化和普通对象存储之间的区别?

  15. 15

    使用Java Stream实例化具有索引和特定Enum值的新对象的不同数量

  16. 16

    访问,实例化和声明模块之间有什么区别?

  17. 17

    无法使用节点+ TypeScript从导入的模块实例化对象?

  18. 18

    C#中的对象实例化之间的区别:将对象存储在引用中与直接调用方法

  19. 19

    类实例化任意类的对象。使用什么模式?

  20. 20

    FileIO对象和open返回的对象之间的区别(文件名,模式)

  21. 21

    变量和对象之间的区别

  22. 22

    对象和类之间的区别

  23. 23

    AngularJS模块和子模块实例化

  24. 24

    初始化对象数组和初始化对象之间有什么区别?

  25. 25

    如何实例化和使用包含其他对象的对象?

  26. 26

    使用带有和不带有return语句的函数初始化JavaScript对象之间有什么区别?

  27. 27

    导入类和直接在对象声明/初始化中使用类之间的区别

  28. 28

    使用Pyserial,为什么在实例化Serial类和用于写入数据的Serial对象之间需要延迟?

  29. 29

    map和forEach实例修改之间的区别

热门标签

归档