我已将类属性分配给常量变量。当我更改常量时,常量是可变的,并且类属性也在更改。
export class SampleClass implements OnInit {
name = "a";
onclick() {
const tempName = this.name;
tempName = "b"; // error
console.log(this.name); // a
}
}
[编辑] 与我在上面询问的情况相同,
export class AppComponent implements OnInit {
name = [
{"option":"Never", "weight":0},
{"option":"Sometimes", "weight":1},
{"option":"Many time", "weight":2},
{"option":"Most of the time", "weight":3},
{"option":"All the time", "weight":4}
];
ngOnInit() {
const tempName = this.name;
tempName[0].weight = 10; // constant is changing
console.log(this.name); // this.name[0].weight also set to 10
console.log(tempName);
}
}
如何取消链接?
请选中此here
答案 0 :(得分:4)
@mbojko在他的评论中是对的:
除了上述重新分配 const 之外,基元(包括字符串)是按值(而非引用)和
tempName = "b"
复制的;不会更改this.name的值
首先,它根本不会编译,即使出于某种原因它也不会更改this.name
的值。
答案 1 :(得分:1)
没有办法
this.name
由于您发布的代码而发生更改。并且常量变量不可更改,并且您还有两个不同的变量,分别是tempName和tempname。
答案 2 :(得分:1)
您的示例令人困惑,就像在堆栈闪电中一样,您要覆盖的const是一个数组。要拆分链接,您必须执行此操作;
此:
cat<<-EOF
{
"a": {
"timestamp": $now,
},
}
EOF
成为:
const tempName = this.name;
这将“取消链接”它们
答案 3 :(得分:0)
感谢您的所有回答。我已经解决了我的问题!
实际上,我所做的是将非原始对象分配给const变量。在javascript中,始终非基本变量仅分配引用(对象的地址)而不分配值。
如果我想将整个对象作为新对象复制到另一个变量,则我的代码应该是
export class AppComponent implements OnInit {
name = [
{"option":"Never", "weight":0},
{"option":"Sometimes", "weight":1},
{"option":"Many time", "weight":2},
{"option":"Most of the time", "weight":3},
{"option":"All the time", "weight":4}
];
ngOnInit() {
let tempName = JSON.parse(JSON.stringify(this.name));
tempName[0].weight = 10;
console.log(this.name); // this.name[0].weight stays 0
console.log(tempName);
}
}
详细的按价值与参考分配参考:Here