Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 理解评估参考_Angular_Typescript_Eval - Fatal编程技术网

Angular 理解评估参考

Angular 理解评估参考,angular,typescript,eval,Angular,Typescript,Eval,我知道在这个话题上还有其他的线索,但我再次提问,因为我真的很努力地理解eval,以及如何正确地使用它,这样它就不会变得邪恶。通过查看此代码,我如何获得console.log(this.arrTest)是否记录[“返回原始”]?我尝试了许多变体,但都不起作用 我不想要这个解决方案,请:this.TestClass.Run.call(this,“this.arrTest=['返回原始'];”我需要类级别内的解决方案 下面是一个角度闪电战: 我已经阅读了这两篇文章,但我不理解其中的解决方案: 在这种

我知道在这个话题上还有其他的线索,但我再次提问,因为我真的很努力地理解eval,以及如何正确地使用它,这样它就不会变得邪恶。通过查看此代码,我如何获得
console.log(this.arrTest)是否记录
[“返回原始”]
?我尝试了许多变体,但都不起作用

我不想要这个解决方案,请:
this.TestClass.Run.call(this,“this.arrTest=['返回原始'];”我需要类级别内的解决方案

下面是一个角度闪电战:

我已经阅读了这两篇文章,但我不理解其中的解决方案:


在这种情况下,没有办法让
eval
不“邪恶”,因为它是邪恶的。应该使用合适的惯用解决方案

  eval(pString);
  (eval)(pString);
这些方法应该是可行的,它们本质上是相同的,因为用括号包装
eval
。其余的
eval
s被间接使用,这导致在全局范围内评估代码

这仅适用于ES6目标。可以看到ES5目标为
var\u this=this
的类用于将
this
从封闭范围传递到箭头函数
这个
Run
方法中保持不变,是
TestClass
对象,而不是类实例。因此,

this.TestClass.Run("_this.arrTest = ['Back to Original'];");
将使用ES5而不是ES6 TypeScript目标

这是一个很好的例子,说明了为什么
eval
被认为是“邪恶的”。它会导致不类型化、不可预测、不安全和未优化的混乱,这可以通过遵循“良好”的编码实践来避免

尚不清楚TestClass.Run的要求是什么,但通常通过回调来处理此类场景:

  constructor() {
    this.TestClass.Run(() => {
      this.arrTest = ['Back to Original'];
    });
    console.log(this.arrTest);
  };

  TestClass = {
    Run : (cb: () => void) => {
     // class instance can be passed to callback as an argument
     // or cb.call(this) when needed
      cb();
    }
  };

根据引入
TestClass
成员以在其所属的类中执行代码的原因,这仍然可能被认为是不合适的解决方案。

因此,在我的场景中,这很好地解决了问题:

export class AppComponent  {
  arrTest = ['Original'];

  constructor() {
    this.TestClass.Run("arrTest", "['Back to Original']");
    console.log(this.arrTest);
  };

  TestClass = {
    Run : (pKey, pValue) => {
      this.arrTest = ['Changed']; //So this works

      this[pKey] = pValue;
    }
  };

}

我真的没有时间深入研究评估是如何工作的,但我想在这里你会找到答案:天哪,我还没到能够解决这个问题的水平!除息的
export class AppComponent  {
  arrTest = ['Original'];

  constructor() {
    this.TestClass.Run("arrTest", "['Back to Original']");
    console.log(this.arrTest);
  };

  TestClass = {
    Run : (pKey, pValue) => {
      this.arrTest = ['Changed']; //So this works

      this[pKey] = pValue;
    }
  };

}