0

我知道这是非常基本的,但是为什么 x 在这个代码块中返回 undefined 呢?有没有办法定义一个属性并立即使用它来设置另一个属性?

    var grid = {
        x : 75,
        y : 75,
        location : [grid.x, grid.y],                
        init : function () {
            console.log(grid.location[0]);
        }
    }
4

2 回答 2

2

在将对象分配给变量之前,您不能使用该变量访问对象的属性。创建对象时,变量grid仍未定义。在创建对象时,您没有对它的任何引用。

将对象分配给变量后,您可以使用这些属性:

var grid = {
    x : 75,
    y : 75,
    init : function () {
        console.log(grid.location[0]);
    }
}

grid.location = [grid.x, grid.y];

您还可以将其包装在函数表达式中以获取返回完整对象的代码:

var grid =
  (function(){

    var obj = {
      x : 75,
      y : 75,
      init : function () {
        console.log(grid.location[0]);
      }
    };
    obj.location = [obj.x, obj.y];

    return obj;

  })();
于 2013-03-25T14:38:24.347 回答
1

有没有办法定义一个属性并立即使用它来设置另一个属性?

,但是,您可以使用 getter,它或多或少是函数的语法糖:

var grid = {
    x : 75,
    y : 75,
    get location() {
        return [this.x, this.y];
    },                
    init : function () {
        console.log(grid.location[0]);
    }
}

http://jsfiddle.net/mattball/erUJj

这个答案总结了各种选项:https ://stackoverflow.com/a/15486618

于 2013-03-25T14:25:43.683 回答