【问题标题】:Simple Object vs. Factory vs. Constructor - Practical Example简单对象 vs. 工厂 vs. 构造函数 - 实际示例
【发布时间】:2016-01-29 04:46:46
【问题描述】:

在 JavaScript 中创建对象的三种方式:

  1. 通过简单的对象创建
  2. 按工厂功能
  3. 按构造函数

  1. 简单的对象创建:

    var ronaldo = {
        name: "Ronaldo",
        age: "35",
        quote: "Hi I am Ronaldo", 
        salary: function(x){ return x+2500; }
    };
    
  2. 工厂功能:

    function human(x,y,z,i){
        return{
            name: x,
            age: y,
            quote: z,
            salary: function(i){ return i+2500; }
        }
    };
    var Zini = human('Zenidan','41','I am Zidane',7500);
    
  3. 构造函数:

    var human = function(x,y,z,i){
        this.name = x,
        this.age = y,
        this.quote = z, 
        this.salary = function(i){ return i+2500; }
    };
    var Lampd = new human('Frank Lampard','39','I am Frank J Lampard',5500);
    

谁能简单的说明一下什么时候使用这些方法中的哪一种来简单地创建对象,以便天真的人也能理解?

我浏览了以下链接,但理解起来有点复杂:

所以我要一些简单的实际案例。

【问题讨论】:

  • 我也想看看上述问题的实际案例☻
  • JS中创建对象的方式还有很多,new-keyword和Object.create()
  • 你能为那些提供简单的“代码片段”吗?这会很有帮助。另外,目前还没有答案。 ;(
  • 您基本上是在询问“我如何、何时以及为什么使用各种 JS OOP 方法”。 IMO 这太宽泛了,并且被教程、书籍和以前的 SO 问题广泛涵盖。
  • Factory和函数构造函数有什么区别?

标签: javascript oop constructor factory


【解决方案1】:

对数据使用简单的对象:当您只需要一组键/值对时。

在您的简单对象示例中,您拥有的不仅仅是数据:salary 方法将行为添加到对象。如果您最终会得到许多这样的对象,最好只使用一个在所有对象之间共享的salary 方法,而不是每个对象都有自己的salary 方法,从而提高性能和可维护性。在多个对象之间共享方法的一种方法是将方法放在对象的原型上。

当您需要创建一个作为原型实例的对象时,您可以使用构造函数。这是一个阅读相关内容的好地方,但它有点密集:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

上面的 MDN 链接还演示了 ECMAScript 2015 class 语法,它是构造函数的替代方法。

更新:请参阅 Dave Newton 的评论,了解何时使用工厂的一个很好的例子

【讨论】:

  • 工厂在与其他 OOP 语言相同的情况下很有用,例如,如果您正在使用 JSON 数据并且您需要基于某种形式的标记的数据/行为(假设这是 JSON):@987654327 @。如果您有多种类型,则需要一个工厂来从中生成行为对象,例如,一个类型可能有自己的编辑器实现。
  • 另外,当您不需要this 时,我建议使用常规函数或静态方法而不是实例方法stackoverflow.com/a/29291666/2482570。对我来说,将函数设为实例方法表明您打算使用this。在您的示例中,const salary = x => x + 2500 将是编写函数的好方法。
猜你喜欢
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多