Javascript基于变量引用更改变量
在我正在编写的程序中,我需要一个如下所示的对象变量:Javascript基于变量引用更改变量,javascript,Javascript,在我正在编写的程序中,我需要一个如下所示的对象变量: var map { cube: {__pt3arraylocation__:[0,0,0], poly: new Object()}, other: {__pt3arraylocation__:[1,0,0], poly: new Object()} }; var map { cube: [0,0,0], other: [1,0,0] }; map.cube.poly = new Object(); map.
var map {
cube: {__pt3arraylocation__:[0,0,0], poly: new Object()},
other: {__pt3arraylocation__:[1,0,0], poly: new Object()}
};
var map {
cube: [0,0,0],
other: [1,0,0]
};
map.cube.poly = new Object();
map.other.poly = new Object();
但是,我希望能够键入map.cube,并让它将pt3arraylocation作为默认值返回,除非我通过键入map.cube.poly指定所需内容
例如:map.cube将返回[0,0,0],而map.cube.poly将返回对象多维数据集中的对象多边形
提前谢谢
我希望能够键入map.cube,并让它将pt3arraylocation作为默认值返回,除非我通过键入map.cube.poly指定所需内容
例如:map.cube将返回[0,0,0],而map.cube.poly将返回对象多维数据集中的对象多边形
在JavaScript中不能这样做
但是,作为替代方案,值得注意的是,如果需要,可以向数组添加任意属性。例如:
var map {
cube: [0,0,0],
other: [1,0,0]
};
map.cube.poly = {}; // {} is the same as `new Object()` but not subject to people...
map.other.poly = {}; // ...overriding the `Object` symbol
然后,map.cube
为您提供数组,map.cube.poly
为您提供存储在该数组中的对象
这怎么可能?因为在JavaScript中。它们只是具有自动length
属性、以特殊方式处理一类属性名称(所有数字名称)并具有Array.prototype
备份的对象。当然,您可以向任何对象添加属性
这样做没有文字语法,这就是为什么我必须在上面的对象初始值设定项之后进行赋值。但这是完全正确的。我一直使用它来交叉索引数组
如果您这样做,请确保您没有在中错误地为..使用
我希望能够键入map.cube,并让它将pt3arraylocation作为默认值返回,除非我通过键入map.cube.poly指定所需内容
例如:map.cube将返回[0,0,0],而map.cube.poly将返回对象多维数据集中的对象多边形
在JavaScript中不能这样做
但是,作为替代方案,值得注意的是,如果需要,可以向数组添加任意属性。例如:
var map {
cube: [0,0,0],
other: [1,0,0]
};
map.cube.poly = {}; // {} is the same as `new Object()` but not subject to people...
map.other.poly = {}; // ...overriding the `Object` symbol
然后,map.cube
为您提供数组,map.cube.poly
为您提供存储在该数组中的对象
这怎么可能?因为在JavaScript中。它们只是具有自动length
属性、以特殊方式处理一类属性名称(所有数字名称)并具有Array.prototype
备份的对象。当然,您可以向任何对象添加属性
这样做没有文字语法,这就是为什么我必须在上面的对象初始值设定项之后进行赋值。但这是完全正确的。我一直使用它来交叉索引数组
如果您这样做,请确保您没有在
中错误地为..使用 我想说的最好的方法是:
var map {
cube: {__pt3arraylocation__:[0,0,0], poly: new Object()},
other: {__pt3arraylocation__:[1,0,0], poly: new Object()}
};
var map {
cube: [0,0,0],
other: [1,0,0]
};
map.cube.poly = new Object();
map.other.poly = new Object();
我想说的最好的方法是:
var map {
cube: {__pt3arraylocation__:[0,0,0], poly: new Object()},
other: {__pt3arraylocation__:[1,0,0], poly: new Object()}
};
var map {
cube: [0,0,0],
other: [1,0,0]
};
map.cube.poly = new Object();
map.other.poly = new Object();
这是不可能实现的。也许你可以玩玩toString()
这是不可能实现的。也许你可以玩玩toString()
没有办法完全按照您想要的方式来做-如果您请求一个对象(即map.cube
),您将得到一个对象。然而,有几种方法可以做类似的事情
- 当用作需要字符串的函数或操作的参数时,如
alert(map.cube)
或“sometext”+map.cube
,通过调用toString
函数将对象转换为字符串。因此,您可以定义,例如:
map.cube.toString = function() { return this.__pt3arraylocation__.toString(); };
- 如果在需要数字时在上下文中使用对象,则会发生类似的情况。在这种情况下,将使用
valueOf()
进行转换。例如,您可以使用
map.cube.valueOf = function() { return this.__pt3arraylocation__.length; };
- 或者,如果将对象定义为函数,则可以通过函数调用获取默认值
var map = {
cube: function() {
return map.cube.__pt3arraylocation__;
}
}
map.cube.__pt3arraylocation__ = [0,0,0];
map.cube.poly = new Object();
alert(map.cube.__pt3arraylocation__); // 0,0,0
alert(map.cube.poly); // [object Object]
alert(map.cube()); // same as map.cube.__pt3arraylocation__
如您所见,在JavaScript中,函数与其他任何函数一样都是对象,因此您不仅可以调用它们,还可以为它们设置字段和方法
没有办法完全按照您的意愿来做-如果您请求一个对象(即
map.cube
),您将得到一个对象。然而,有几种方法可以做类似的事情
- 当用作需要字符串的函数或操作的参数时,如
alert(map.cube)
或“sometext”+map.cube
,通过调用toString
函数将对象转换为字符串。因此,您可以定义,例如:
map.cube.toString = function() { return this.__pt3arraylocation__.toString(); };
- 如果在需要数字时在上下文中使用对象,则会发生类似的情况。在这种情况下,将使用
valueOf()
进行转换。例如,您可以使用
map.cube.valueOf = function() { return this.__pt3arraylocation__.length; };
- 或者,如果将对象定义为函数,则可以通过函数调用获取默认值
var map = {
cube: function() {
return map.cube.__pt3arraylocation__;
}
}
map.cube.__pt3arraylocation__ = [0,0,0];
map.cube.poly = new Object();
alert(map.cube.__pt3arraylocation__); // 0,0,0
alert(map.cube.poly); // [object Object]
alert(map.cube()); // same as map.cube.__pt3arraylocation__
如您所见,在JavaScript中,函数与其他任何函数一样都是对象,因此您不仅可以调用它们,还可以为它们设置字段和方法
是正确的。根据他的回答,我想指出,您也可以这样分配
map.cube
var map = {
cube: function(){
var val = [0,0,0];
val.poly = {};
return val; }()
};
或更多值:
function polyval(val){
val.poly = {};
return val;
}
var map = {
cube: polyval([0,0,0]),
other: polyval([1,0,0]),
more: polyval([1,1,0])
/* ... etc */
};
这是对的。根据他的回答,我想指出,您也可以这样分配map.cube
var map = {
cube: function(){
var val = [0,0,0];
val.poly = {};
return val; }()
};
或更多值:
function polyval(val){
val.poly = {};
return val;
}
var map = {
cube: polyval([0,0,0]),
other: polyval([1,0,0]),
more: polyval([1,1,0])
/* ... etc */
};