简单对象与工厂与构造函数 - 实例

Dea*_*ool 7 javascript oop constructor factory

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

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

  1. 简单对象创建:

    var ronaldo = {
        name: "Ronaldo",
        age: "35",
        quote: "Hi I am Ronaldo", 
        salary: function(x){ return x+2500; }
    };
    
    Run Code Online (Sandbox Code Playgroud)
  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);
    
    Run Code Online (Sandbox Code Playgroud)
  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);
    
    Run Code Online (Sandbox Code Playgroud)

有人可以提供简单的插图,说明何时使用这些方法中的哪一种以简单的方式创建对象,这样一个天真的人也可以理解?

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

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

Max*_*ber 3

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

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

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

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

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

  • 工厂在与其他 OOP 语言相同的情况下很有用,例如,如果您正在使用 JSON 数据并且需要基于某种形式的标记的数据/行为(假设这是 JSON): `{ id: n, type: 'some_type ',数据:{随便}}`。如果您有多种类型,则需要一个工厂来从中生成行为对象,例如,一个类型可能有自己的编辑器实现。 (3认同)