JavaScriptでは配列があります。配列要素を追加するために使用push()
していますが、上記の要素を操作すると、各配列要素が変更されますが、1つだけが変更されます。私のコードは次のとおりです。
// Arrays to hold the elements that have been created (added to the document).
create.element_array = []
create.element_array["name"] = []
create.element_array["name"]["properties"] = []
var element_properties =
{
// Default all to 0.
borderTopStyle: 0, borderRightStyle: 0, borderBottomStyle: 0, borderLeftStyle: 0,
borderTopWidth: 0, borderRightWidth: 0, borderBottomWidth: 0, borderLeftWidth: 0,
borderTopColor: 0, borderRightColor: 0, borderBottomColor: 0, borderLeftColor: 0,
}
// Testing purposes. These will be added dynamically in production version.
create.element_array["name"].push("default_header");
create.element_array["name"]["properties"].push(element_properties);
create.element_array["name"].push("default_body");
create.element_array["name"]["properties"].push(element_properties);
create.element_array["name"].push("default_footer");
create.element_array["name"]["properties"].push(element_properties);
// Evidence that each array element is changed with index manipulation.
create.element_array["name"]["properties"][0].borderTopStyle = "dashed";
console.log(create.element_array["name"]["properties"][0]);
console.log(create.element_array["name"]["properties"][1]);
console.log(create.element_array["name"]["properties"][2]);
これから私が期待する結果は、インデックス0のみを変更する必要があるということですが、そうではありません。上記のconsole.log行は、次のように出力します。
Object
borderBottomColor: 0
borderBottomStyle: 0
borderBottomWidth: 0
borderLeftColor: 0
borderLeftStyle: 0
borderLeftWidth: 0
borderRightColor: 0
borderRightStyle: 0
borderRightWidth: 0
borderTopColor: 0
borderTopStyle: "dashed"
borderTopWidth: 0
__proto__: Object
library.js:8
Object
borderBottomColor: 0
borderBottomStyle: 0
borderBottomWidth: 0
borderLeftColor: 0
borderLeftStyle: 0
borderLeftWidth: 0
borderRightColor: 0
borderRightStyle: 0
borderRightWidth: 0
borderTopColor: 0
borderTopStyle: "dashed"
borderTopWidth: 0
__proto__: Object
library.js:8
Object
borderBottomColor: 0
borderBottomStyle: 0
borderBottomWidth: 0
borderLeftColor: 0
borderLeftStyle: 0
borderLeftWidth: 0
borderRightColor: 0
borderRightStyle: 0
borderRightWidth: 0
borderTopColor: 0
borderTopStyle: "dashed"
borderTopWidth: 0
__proto__: Object
library.js:8
borderTopStyle
変更される唯一のインデックスとしてインデックス0を明示的に定義すると、要素ごとに変更されるのはなぜですか?