基于变量引用的 Javascript 更改变量
Javascript change variable based on variable reference
在我正在编写的程序中,我需要一个看起来像这样的对象变量:
var map {
cube: {__pt3arraylocation__:[0,0,0], poly: new Object()},
other: {__pt3arraylocation__:[1,0,0], 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
备份它们。当然,您可以向任何对象添加属性。
没有文字语法可以执行此操作,这就是为什么我必须在上面的对象初始值设定项之后使用赋值来执行此操作。但它是完全有效的。我一直用它来交叉索引数组。
如果你这样做,请确保你没有错误地使用for..in
;更多。
我想说的最好的方法是这样的:
var map {
cube: [0,0,0],
other: [1,0,0]
};
map.cube.poly = new Object();
map.other.poly = new Object();
这是不可能的。也许你可以玩toString((
var map = {
cube: {
__pt3arraylocation__:[0,0,0],
poly: new Object(),
toString : function() {
return this.__pt3arraylocation__.toString()
}
},
other: {__pt3arraylocation__:[1,0,0], poly: new Object()}
};
map.cube == '0,0,0'
map.cube.split(',') == map.cube.__pt3arraylocation__
没有办法完全按照你想要的方式做到这一点 - 如果你请求一个对象(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 中,函数与其他任何对象一样都是对象,因此您不仅可以调用它们,还可以为它们设置字段和方法。
T.J. Crowder是对的。根据他的回答,我想说你也可以像这样分配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 */
};
- 调用类向后变量 (JavaScript)
- 初始化父类中的变量(JavaScript/CoffeeScript 习语)
- 可以'找不到变量javascript错误
- 输出数组变量javascript
- 自提交表单访问变量javascript
- 将变量 javascript 添加到用于旋转图像的链接中
- 在文本字段中显示保存的本地存储变量 - javascript
- 将变量添加到变量 JavaScript 中
- 获取要在变量 JavaScript 中使用的用户输入值
- 如何在变量 Javascript 中删除双引号
- 使用变量 javascript 从 json 文件中获取数据
- 读取输入和打印变量 - JavaScript 和 HTML 4.01
- 传递 PHP 变量 JavaScript 窗口位置
- 重置变量 JavaScript
- 变量 JavaScript 中的变量
- 尝试使用多个函数时无法使用全局变量 - JavaScript - 初学者
- 如何按值将数组分配给另一个变量 JavaScript
- setTimout 搞砸了变量 JavaScript
- 用内部函数变量更改外部函数变量?Javascript
- 根据变量 JavaScript 增加