基于其自己的变量之一创建Javascript对象?

时间:2012-03-08 21:53:59

标签: javascript

以下是我的一些javascript代码:

   var screenWidth = 1280;
   var screenHeight = 720;

   var shapeComtainer = {
    name : "bender",
    offsetX : 100,
    offsetY : 100,
    width : screenWidth - 2*offsetX,
    height : screenHeight - 2*offsetY,
   };

我收到错误offsetX和offsetY未定义。这是我计算宽度和高度的行。问题是我的宽度和高度取决于同一对象内的其他变量。

是否有更好/更正的方法来使用表示偏移量和大小信息等信息的javascript对象?

4 个答案:

答案 0 :(得分:4)

从错误消息中已经很明显,这是不可能的。但是,您可以执行以下操作:

var shapeContainer = {
    name : "bender",
    offsetX : 100,
    offsetY : 100,
    getwidth : function() { return screenWidth - 2 * this.offsetX },
    getheight : function() { return screenHeight - 2 * this.offsetY },
};

http://jsfiddle.net/XQGDB/

答案 1 :(得分:2)

作为Xander回答的补充:也可以只使用一个包裹整个对象的函数。

var shapeContainer = new function() {
    this.name = "bender";
    // ...
    this.width = screenWidth - 2 * this.offsetX;
};

答案 2 :(得分:1)

因为到目前为止还没有人提到它,这也是ECMAscript5的getter功能的一个主要例子:

var defProps = Object.defineProperties;

var shapeComtainer = {
    name : "bender",
    offsetX : 100,
    offsetY : 100
};

defProps(shapeComtainer, {
    width: {
        get: function(){ return screenWidth - 2*this.offsetX; }
    },
    height: {
        get: function(){ return screenHeight - 2*this.offsetY; }
    }
});

然后您可以像访问它一样访问它:

shapeComtainer.height;

答案 3 :(得分:-1)

您必须使用shapeComtainer.offsetXshapeComtainer.offsetY