我知道这是非常基本的,但为什么x在此代码块中返回undefined?有没有办法定义属性并立即使用它来设置另一个属性?
var grid = {
x : 75,
y : 75,
location : [grid.x, grid.y],
init : function () {
console.log(grid.location[0]);
}
}
答案 0 :(得分: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;
})();
答案 1 :(得分:1)
有没有办法定义属性并立即用它来设置另一个属性?
No.但是,你可以use a 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