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