簡體   English   中英

通過數組訪問函數中的嵌套屬性:Javascript

[英]Accessing nested properties in functions via arrays: Javascript

我可以找到一個一級屬性,但是它不能讓我訪問color下的“ tint”屬性。 通常,您只要將圓點使用到想要達到的水平即可,但對我而言不起作用。

obj = new Object();

obj.color.tint = "brick red";

alert(obj.color);

var arr = [];

arr[0] = obj;

alert(arr[0].color.tint);
obj.color.tint = "brick red";

這部分將失敗,因為color不存在。 JavaScript不會“自動填充”這些空白。 您必須先將color定義為對象,然后才能為其分配tint

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

此外,可以將其簡化為:

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

 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.*

您不能鏈接點符號來創建嵌套的元素,因為在您嘗試訪問其屬性時未定義color

Onw的方法:

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

要么:

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

您不能將屬性分配給不存在的對象。 首先,您必須創建該對象。 但是有時候這是必要的。 假設您要動態地擁有該數組對象結構。 我已經開發了一個對象方法來實現這一目標,即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)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM