角类属性为常量

时间:2019-10-22 13:11:56

标签: angular

我已将类属性分配给常量变量。当我更改常量时,常量是可变的,并且类属性也在更改。

    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

4 个答案:

答案 0 :(得分:4)

@mbojko在他的评论中是对的:

  

除了上述重新分配 const 之外,基元(包括字符串)是按值(而非引用)和tempName = "b"复制的;不会更改this.name的值

首先,它根本不会编译,即使出于某种原因它也不会更改this.name的值。

enter image description here

答案 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