如何引用和计算Javascript对象的其他部分?

时间:2018-10-22 18:59:31

标签: javascript

我正在尝试根据对象cube的l,w,h属性计算基本体积,该对象是item中的对象。

var item = new Object();
    
item["cube"] = {
    dimensions: [1.00,2.00,1.50, "in"], // l, w, h, unit (inches)
    volume: (this.dimensions[0] * this.dimensions[1] * this.dimensions[2]) // V = l * w * h
};

alert( item["cube"].volume + item["cube"].dimensions[3] ); // Volume + unit (inches)

我还尝试在计算体积时不使用this,而是指定对象的确切部分:item["cube"][dimensions][0] * item["cube"][dimensions][1] * item["cube"][dimensions][2]

目标是获取警报3.00in3in。关于我做错了什么,甚至可以解决的任何建议?我可以在对象中放置函数吗?

编辑:添加了实际功能:

var item = new Object();

function calcVolume (l,w,h) {
	return l * w * h;
};

item["cube"] = {
    dimensions: [1.00,2.00,1.50, "in"], // l, w, h, unit (inches)
    volume: calcVolume(this.dimensions[0],this.dimensions[1],this.dimensions[2]) // V = l * w * h
};

alert( item["cube"].volume + item["cube"].dimensions[3] ); // Volume + unit (inches)

2 个答案:

答案 0 :(得分:3)

您可以为此使用getter

var item = new Object();
function calcVolume (l,w,h) { return l * w * h;};

item["cube"] = {
    dimensions: [1.00,2.00,1.50, "in"], // l, w, h, unit (inches)
    get volume() { return calcVolume(this.dimensions[0],this.dimensions[1],this.dimensions[2]) }
};

alert( item["cube"].volume + item["cube"].dimensions[3] ); // Volume + unit (inches)

尽管我认为这将是ES6 Classes的一个很好的例子:

class Cube {
  constructor(l, w, h, unit) {
    this.l = l;
    this.w = w;
    this.h = h;
    this.unit = unit || "in";
  }
  get volume() { return this.l * this.w * this.h };
  get volumeAsString() { return this.volume + this.unit };
}

var c = new Cube(1.00, 2.00, 1.50);
console.log(c.volumeAsString);

答案 1 :(得分:2)

在函数中使用this

var item = {
  "cube": {
    dimensions: [1.00, 2.00, 1.50, "in"],
    volume: function () { return this.dimensions[0] * this.dimensions[1] * this.dimensions[2]; }
  }
};

alert( item["cube"].volume() + item["cube"].dimensions[3] );