【问题标题】:Accessing nested properties in functions via arrays: Javascript通过数组访问函数中的嵌套属性:Javascript
【发布时间】:2016-06-01 04:31:39
【问题描述】:

我可以找到一个第一级属性,但它不会让我访问颜色下的“色调”属性。通常,您只需将点用于您想要达到的任何级别,但这对我不起作用。

obj = new Object();

obj.color.tint = "brick red";

alert(obj.color);

var arr = [];

arr[0] = obj;

alert(arr[0].color.tint);

【问题讨论】:

  • 此代码引发错误。以后可以查看开发者控制台(按F12)进行调试。

标签: javascript arrays properties


【解决方案1】:
obj.color.tint = "brick red";

这部分会失败,因为color 不存在。 JavaScript 不会“自动填充”这些空白。您必须先将color 定义为对象,然后才能将tint 分配给它。

var obj = {};
obj.color = {};
obj.color.tint = 'brick red';

此外,这可以简化为:

var obj = {
  color: {
    tint: 'brick red'
  }
};

【讨论】:

  • 非常感谢
  • @Shinji-san 请注意,使用new Object() 是不好的做法。最好使用对象字面量{},这样万一其他代码(例如库)修改了Object.prototype,您就不会感到意外。
【解决方案2】:

obj = new Object();

obj.color = new Object(); // Try add this line

obj.color.tint = "brick red";

alert(obj.color);

var arr = [];

arr[0] = obj;

alert(arr[0].color.tint);

我不确定“您只需将点用于您想要达到的任何级别

基本上,Javascript 都是关于对象的,您可以使用点符号来访问现有对象

你可以访问obj.color是因为你首先将obj初始化为一个对象。

同样,如果你想在obj.color下设置属性,你必须先将obj.color初始化为一个新对象,然后你可以随意访问obj.color.*

【讨论】:

    【解决方案3】:

    您不能链接点符号来创建嵌套元素,因为 color 在您尝试访问它的属性时没有定义;

    有办法做到这一点:

    var obj = new Object();
    obj.color = {};
    obj.color.tint = 'tint';
    

    或者:

    var obj = new Object();
    obj.color = {tint:'tint'};
    

    【讨论】:

    • 谢谢,如果我想给 tint 添加一个 prop,不就是 color.tint = { transparent: 50 };或 obj.color.tint = { 透明度:50 };所有这些仍然是'obj'的对象,对吧?
    • @Shinji-san 你可以随心所欲地筑巢。 obj.my_properties = {visuals:{color:{tint:'red'}}}
    【解决方案4】:

    您不能将属性分配给不存在的对象。首先,您必须创建该对象。然而,有时这是必要的。假设您想要动态地拥有该数组对象结构。我开发了一个 Object 方法来完成 Object.prototype.setNestedValue() 的工作原理

    Object.prototype.setNestedValue = function(...a) {
      a.length > 2 ? typeof this[a[0]] === "object" && this[a[0]] !== null ? this[a[0]].setNestedValue(...a.slice(1))
                                                                           : (this[a[0]] = typeof a[1] === "string" ? {} : new Array(a[1]),
                                                                             this[a[0]].setNestedValue(...a.slice(1)))
                   : this[a[0]] = a[1];
      return this;
    };
    
    var arr = [].setNestedValue(0,"color","tint","brick red");
    console.log(JSON.stringify(arr));

    【讨论】:

      猜你喜欢
      • 2016-09-14
      • 1970-01-01
      • 2018-06-03
      • 2019-09-16
      • 2020-07-13
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      相关资源
      最近更新 更多