Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中创建共存对象_Javascript_Oop - Fatal编程技术网

在javascript中创建共存对象

在javascript中创建共存对象,javascript,oop,Javascript,Oop,是否可以在javascript中创建一个对象的多个实例,以便它们都可以同时进行操作/编辑?这与我前面的问题有关:。我试图做的是让每个订单对象都准备好编辑,直到客户准备好付款/休假,以便可以根据需要向其添加新项目或从中删除现有项目,并且必须能够同时对所有订单对象进行编辑 如果表的数量不是很大,比如说,大约15个,那么创建一个包含15个具有不同表号的对象的静态数组会更好吗?呃,是的-很简单(粗略的代码警告): 不要创建静态数组,因为当动态结构足够琐碎时,根本不需要创建静态数组。也许我在你的问题中遗漏

是否可以在javascript中创建一个对象的多个实例,以便它们都可以同时进行操作/编辑?这与我前面的问题有关:。我试图做的是让每个订单对象都准备好编辑,直到客户准备好付款/休假,以便可以根据需要向其添加新项目或从中删除现有项目,并且必须能够同时对所有订单对象进行编辑

如果表的数量不是很大,比如说,大约15个,那么创建一个包含15个具有不同表号的对象的静态数组会更好吗?

呃,是的-很简单(粗略的代码警告):

不要创建静态数组,因为当动态结构足够琐碎时,根本不需要创建静态数组。也许我在你的问题中遗漏了什么


编辑:根据前面的问题,使用更多说明性代码进行更新,这是解决问题的另一种方法


然而,在这一点上,这只是一种教学。如果这是真正的应用程序,我建议您使用服务器端语言对所有这些进行建模—JS实际上是用于控制UI行为,而不是业务对象建模

var Restaurant = {

    Order   :   function (params)
                {
                    this.id = params.id;
                    this.table = params.table;
                    this.items = [];
                    this.number_of_items = 0;

                    if(!Restaurant.Order.prototype.addItem)
                    {
                        Restaurant.Order.prototype.addItem = function (item)
                        {
                            // assuming name is unique let's use this for an associative key
                            this.items[item.name] = item;

                            this.number_of_items++;

                            //returning the item let's you chain methods
                            return item;
                        }
                    }
                },

    Item    :   function (params)
                {
                    this.name = params.name;
                    this.quantity = params.quantity;
                    this.unit_price = params.unit_price;

                    if(!Restaurant.Item.prototype.price)
                    {
                        Restaurant.Item.prototype.price = function ()
                        {
                            return this.quantity * this.unit_price;
                        }
                    }
                },

    orders  :   [],

    addOrder :  function (order)
                {
                    // assuming id is unique let's use this for an associative key
                    this.orders[order.id] = order;
                    //returning the item let's you chain methods
                    return order;
                }
}

with (Restaurant)
{
    with (addOrder( new Restaurant.Order({id:123, table:456}) )) // chaining!
    {
        addItem( new Restaurant.Item({name: 'foo', quantity: 10, unit_price: 10}) );
        addItem( new Restaurant.Item({name: 'bar', quantity: 100, unit_price: 1}) );
    }
}

var num_items = Restaurant.orders[123].items['foo'].price(); // returns 100
呃,是的-很简单(粗略的代码警告):

不要创建静态数组,因为当动态结构足够琐碎时,根本不需要创建静态数组。也许我在你的问题中遗漏了什么


编辑:根据前面的问题,使用更多说明性代码进行更新,这是解决问题的另一种方法


然而,在这一点上,这只是一种教学。如果这是真正的应用程序,我建议您使用服务器端语言对所有这些进行建模—JS实际上是用于控制UI行为,而不是业务对象建模

var Restaurant = {

    Order   :   function (params)
                {
                    this.id = params.id;
                    this.table = params.table;
                    this.items = [];
                    this.number_of_items = 0;

                    if(!Restaurant.Order.prototype.addItem)
                    {
                        Restaurant.Order.prototype.addItem = function (item)
                        {
                            // assuming name is unique let's use this for an associative key
                            this.items[item.name] = item;

                            this.number_of_items++;

                            //returning the item let's you chain methods
                            return item;
                        }
                    }
                },

    Item    :   function (params)
                {
                    this.name = params.name;
                    this.quantity = params.quantity;
                    this.unit_price = params.unit_price;

                    if(!Restaurant.Item.prototype.price)
                    {
                        Restaurant.Item.prototype.price = function ()
                        {
                            return this.quantity * this.unit_price;
                        }
                    }
                },

    orders  :   [],

    addOrder :  function (order)
                {
                    // assuming id is unique let's use this for an associative key
                    this.orders[order.id] = order;
                    //returning the item let's you chain methods
                    return order;
                }
}

with (Restaurant)
{
    with (addOrder( new Restaurant.Order({id:123, table:456}) )) // chaining!
    {
        addItem( new Restaurant.Item({name: 'foo', quantity: 10, unit_price: 10}) );
        addItem( new Restaurant.Item({name: 'bar', quantity: 100, unit_price: 1}) );
    }
}

var num_items = Restaurant.orders[123].items['foo'].price(); // returns 100

由于您在问题中使用的是对象文字,因此我建议您看看这种技术,它将允许您轻松创建从基本实例继承的新对象实例,例如:

// Helper function
if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}

// "Base" order object
var order = {
    id: 0,
    table: 0,
    items: []
};

var orders = [], n = 10;
while (n--) {  // make 10 objects inheriting from order and add them to an array
  orders.push(Object.create(order)); 
}
稍后,您可以访问和操作
orders
数组中的
order
对象:

orders[0].id = 10;
orders[0].table = 5;
orders[0].items.push({
  name: "Beer",
  quantity: 1,
  unit_price: 3
});

由于您在问题中使用的是对象文字,因此我建议您看看这种技术,它将允许您轻松创建从基本实例继承的新对象实例,例如:

// Helper function
if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}

// "Base" order object
var order = {
    id: 0,
    table: 0,
    items: []
};

var orders = [], n = 10;
while (n--) {  // make 10 objects inheriting from order and add them to an array
  orders.push(Object.create(order)); 
}
稍后,您可以访问和操作
orders
数组中的
order
对象:

orders[0].id = 10;
orders[0].table = 5;
orders[0].items.push({
  name: "Beer",
  quantity: 1,
  unit_price: 3
});

你说的“操纵”是指在浏览器中吗?还是在服务器上?所谓“操纵”,是指在浏览器中?还是在服务器上?你说得对。贾扎卡拉胡凯伦。我对javascript和oop都是新手。所以我仍然很难掌握简单的事情。不用担心——当我说琐碎的事情时,这不是对你的反映,而是对问题的反映。CMS根据您最初的问题为您提供了另一种方法(工厂方法),因此您可以看到,使用JS可以实现给定的解决方案。“用服务器端语言对所有这些进行建模-JS实际上是用于控制UI行为,而不是业务对象建模。”嗯哼,你假设JS不是服务器端:)你说得对。贾扎卡拉胡凯伦。我对javascript和oop都是新手。所以我仍然很难掌握简单的事情。不用担心——当我说琐碎的事情时,这不是对你的反映,而是对问题的反映。CMS根据您最初的问题为您提供了另一种方法(工厂方法),因此您可以看到,使用JS可以实现给定的解决方案。“用服务器端语言对所有这些进行建模-JS实际上是用于控制UI行为,而不是业务对象建模。”嗯,您假设JS不是服务器端:)