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 */
          };